Calcular e exibir datas no intervalo com PHP

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!