Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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.
>
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
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.
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.
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.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.
$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);
Você poderia usar um for para varrer todo array e verificar se o valor existe, ou simplesmente usar o in_array mesmo.