fork download
  1. <?php
  2.  
  3. // Datas vindas do banco de dados:
  4. $dates = [
  5. ["2017-05-08 11:28:40", "2017-05-08 17:52:12"],
  6. ["2017-05-08 18:34:02", "2017-05-10 09:02:57"],
  7. ["2017-05-10 09:44:31", "2017-05-10 13:22:10"],
  8. ["2017-05-10 22:17:54", "2017-05-11 03:41:25"]
  9. ];
  10.  
  11. // Percorre os intervalos de datas:
  12. foreach ($dates as $index => $date)
  13. {
  14.  
  15. // Cria um objeto DateTime para cada:
  16. $start = new DateTime($date[0]);
  17. $end = new DateTime($date[1]);
  18.  
  19. // Se a diferença entre as datas for superior a um dia:
  20. if ($end->diff($start)->format("%a") > 0)
  21. {
  22. // Lista de fatias do intervalo:
  23. $interval = [];
  24.  
  25. // Enquanto a diferença for maior que um dia:
  26. while ($end->diff($start)->format("%a") > 0)
  27. {
  28. // Define a fatia do intervalo para o dia:
  29.  
  30. $sliceStart = clone $start;
  31. $sliceEnd = clone $start;
  32.  
  33. $interval[] = [$sliceStart->format("Y-m-d H:i:s"), $sliceEnd->setTime(23, 59, 59)->format("Y-m-d H:i:s")];
  34.  
  35. // Incrementa em um dia a data de início:
  36. $start->modify("+1 day")->setTime(0, 0, 0);
  37. }
  38.  
  39. // Define o intervalo para o último dia:
  40. $interval[] = [$start->format("Y-m-d H:i:s"), $end->format("Y-m-d H:i:s")];
  41.  
  42. // Substitui o intervalo original pela lista de fatias:
  43. $dates[$index] = $interval;
  44. }
  45. }
  46.  
  47. print_r($dates);
Success #stdin #stdout 0.01s 83904KB
stdin
Standard input is empty
stdout
Array
(
    [0] => Array
        (
            [0] => 2017-05-08 11:28:40
            [1] => 2017-05-08 17:52:12
        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => 2017-05-08 18:34:02
                    [1] => 2017-05-08 23:59:59
                )

            [1] => Array
                (
                    [0] => 2017-05-09 00:00:00
                    [1] => 2017-05-09 23:59:59
                )

            [2] => Array
                (
                    [0] => 2017-05-10 00:00:00
                    [1] => 2017-05-10 09:02:57
                )

        )

    [2] => Array
        (
            [0] => 2017-05-10 09:44:31
            [1] => 2017-05-10 13:22:10
        )

    [3] => Array
        (
            [0] => 2017-05-10 22:17:54
            [1] => 2017-05-11 03:41:25
        )

)