Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Br3n0k

Exibindo datas entre um intervalo de datas

Recommended Posts

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

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

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

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

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

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

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

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

$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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.