Br3n0k 1 Denunciar post Postado Outubro 16, 2015 Olá, hoje de tarde encontrei esse codigo na net que mostrava como mostrar as datas dentro de um intervalo entre duas datas: //Star date $dateStart = '20/04/2015'; $dateStart = implode('-', array_reverse(explode('/', substr($dateStart, 0, 10)))).substr($dateStart, 10); $dateStart = new DateTime($dateStart); //End date $dateEnd = '25/04/2015'; $dateEnd = implode('-', array_reverse(explode('/', substr($dateEnd, 0, 10)))).substr($dateEnd, 10); $dateEnd = new DateTime($dateEnd); //Prints days according to the interval $dateRange = array(); while($dateStart <= $dateEnd){ $dateRange[] = $dateStart->format('Y-m-d'); $dateStart = $dateStart->modify('+1day'); } var_dump($dateRange); porem o resultado que me aparece é o array: array(6) { [0]=> string(10) "2015-04-20" [1]=> string(10) "2015-04-21" [2]=> string(10) "2015-04-22" [3]=> string(10) "2015-04-23" [4]=> string(10) "2015-04-24" [5]=> string(10) "2015-04-25" } Agora veio a questão, e se eu tivesse uma data qualquer e quisesse saber se essa data está entre este intervalo seria com o in_array? ou teria uma forma de comparar isso? Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Outubro 16, 2015 Você poderia usar um for para varrer todo array e verificar se o valor existe, ou simplesmente usar o in_array mesmo. Compartilhar este post Link para o post Compartilhar em outros sites
Helmesvs 10 Denunciar post Postado Outubro 16, 2015 Mas desse jeito so vai encontrar a data se ela for exatamente uma que esteja no banco, e no caso ele quer verificar se ela estar no intevalo. Vc precisa definir a primeira e a ultima, depois fazer a verificação. Compartilhar este post Link para o post Compartilhar em outros sites
Br3n0k 1 Denunciar post Postado Outubro 17, 2015 Mas desse jeito so vai encontrar a data se ela for exatamente uma que esteja no banco, e no caso ele quer verificar se ela estar no intevalo. você precisa definir a primeira e a ultima, depois fazer a verificação. Me de uma luz, não entendi ao certo, porem o que você falou é verdade, eu preciso comparar se uma data está no intervalo entre as duas datas Compartilhar este post Link para o post Compartilhar em outros sites
gabriel.anhaia 1 Denunciar post Postado Outubro 17, 2015 A saída desse script vai ser algo tipo isso como você demonstrou: array(6) {[0]=>string(10) "2013-04-20"[1]=>string(10) "2013-04-21"[2]=>string(10) "2013-04-22"[3]=>string(10) "2013-04-23"[4]=>string(10) "2013-04-24"[5]=>string(10) "2013-04-25"} observe que é um array de Strings com todos os intervalos entre a data inicial e a Final. tudo que você vai ter que fazer é armazenar a data que quer verificar em uma variável ex: $data_verificar = '2013-04-20'; if (in_array($data_verificar, $dateRange) echo 'A data está no intervalo'; else echo 'não está no intervalo'; o in_array vai comparar a sua string que contem a data com todas as strings de intervalo que foram armazenadas no array. Acredito que deva ter uma forma mais fácil de fazer isso sem ter que percorrer todas as datas e armazena-las em outro array, porem desconheço. Uma dica que posso dar é, se estes dados vierem do Banco de dados, você pode usar os comandos para comparar no próprio banco, pelo menos no SQL fica bem mais fácil. É possível comparar as datas simplesmente com sinais de > e < ou usar o BETWEEN. porem ai depende se seria mais adequado ou até possível usar dessa forma no teu projeto. Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Outubro 17, 2015 Para comparar no intervalo use o sort para ordenar o array de forma crescente, pegue o primeiro e o último elemento do array e compare com um if. Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Outubro 17, 2015 Se você está criando o intervalo através das variáveis start e end como no exemplo citado, basta aproveitar-se das duas e criar o if como o ESerra mencionou. Veja: <?php $DateStart = DateTime::createFromFormat( 'd/m/Y', '01/10/2015' ); $DateEnd = DateTime::createFromFormat( 'd/m/Y', '20/10/2015' ); $DateIWantToCheck = DateTime::createFromFormat( 'd/m/Y', '15/10/2015' ); if ( $DateIWantToCheck >= $DateStart && $DateIWantToCheck <= $DateEnd ) echo 'Pertence.'; else echo 'Não pertence.'; Retorno: Pertence. Compartilhar este post Link para o post Compartilhar em outros sites
Carlos Antoliv 6 Denunciar post Postado Outubro 18, 2015 Não sei o que tu quer fazer exatamente, mas se precisa mostrar conteúdo relacionados a período entre datas, acho que pode ser algo um pouco mais simples, tipo: De: <input name="data1" type="text" id="data1" class="data" size="15" style=" outline:none;"> Ate: <input name="data2" type="text" id="data2" class="data" size="15"> Botão Enviar <input name="btn_enviar" id="btn_enviar" type="submit" value="Enviar"/> $data1 = $_POST["data1"];$data2 = $_POST["data2"];$sql = "SELECT * FROM tabela WHERE data BETWEEN '$data1' and '$data2' "; Assim você consegue mostar registros entre períodos de datas. Compartilhar este post Link para o post Compartilhar em outros sites
gersoncorreia 0 Denunciar post Postado Outubro 30, 2015 $dateStart = '20/04/2013'; $dateStart = implode('-', array_reverse(explode('/', substr($dateStart, 0, 10)))).substr($dateStart, 10); $dateStart = new DateTime($dateStart); //End date $dateEnd = '25/04/2013'; $dateEnd = implode('-', array_reverse(explode('/', substr($dateEnd, 0, 10)))).substr($dateEnd, 10); $dateEnd = new DateTime($dateEnd); $minhadata = "23/04/2013"; $minhadata = implode('-', array_reverse(explode('/', substr($minhadata, 0, 10)))).substr($minhadata, 10); $minhadata = new DateTime($minhadata); //Prints days according to the interval $dateRange = array(); while($dateStart <= $dateEnd){ $dateRange[] = $dateStart->format('Y-m-d'); $dateStart = $dateStart->modify('+1day'); if($minhadata == $dateStart){ echo "achei"; $meu = date_format($minhadata,"Y/m/d "); echo $meu; }else{ echo "nada";} ; } var_dump($dateRange); Compartilhar este post Link para o post Compartilhar em outros sites