Esses dias tive que fazer uma rotina para exibir todas as datas dentro de um certo intervalo estipulado pelo cliente.
Exemplo
Se o usuário digitou a data 20/04/2013 e 25/04/2013, a rotina teria que exibir obrigatoriamente todas datas dentro deste limite, que seriam as seguintes datas, exatamente:
- 20/04/2013
- 21/04/2013
- 22/04/2013
- 23/04/2013
- 24/04/2013
- 25/04/2013
Inicialmente isso me pareceu super simples e até foi. Segue abaixo a minha rotina para imprimir todas as datas dentro do intervalo solicitado.
//Star date
$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);
//Prints days according to the interval
$dateRange = array();
while($dateStart <= $dateEnd){
$dateRange[] = $dateStart->format('Y-m-d');
$dateStart = $dateStart->modify('+1day');
}
var_dump($dateRange);
Vamos para explicações
1 – Entre as linhas 01 e 10 eu faço o tratamento da data de início e fim utilizando a classe DateTime do PHP.
2 – Entre as linhas 13 e 17, eu faço um loop em busca de todos os dias deste intervalo. Perceba que na linha 16 eu somo um dia na variável $dateStart.
3 – E finalmente na linha 19 eu imprimo todos as datas que estão dentro deste intervalo.
Você tem alguma outra forma de exibir todas datas dentro de um intervalo? Aproveite e sugira comentando abaixo!