3v4l.org

run code in 300+ PHP versions simultaneously
<?php function getRange($start, $end) { $range = []; $start_date = \DateTime::createFromFormat('Y-m-d H:i:s', $start); $end_date = \DateTime::createFromFormat('Y-m-d H:i:s', $end); $diff = $end_date->diff($start_date); for($i = 0; $i <= $diff->days; $i++) { $event_end = clone $start_date; $event_end->add(new \DateInterval("P1D")); if ($event_end > $end_date) { $range[] = [ $start_date->format('Y-m-d'), $start_date->format('Y-m-d 00:00:00'), $end_date->format('Y-m-d H:i:s'), ]; break; } $range[] = [ $start_date->format('Y-m-d'), $i > 0 ? $start_date->format('Y-m-d 00:00:00') : $start_date->format('Y-m-d H:i:s'), $event_end->format('Y-m-d 00:00:00') ]; $start_date->add(new \DateInterval("P1D")); } return $range; } echo "Example 1: ", json_encode(getRange('2010-11-07 10:00:00', '2010-11-09 19:00:00'), JSON_PRETTY_PRINT); echo "\nExample 2: ", json_encode(getRange('2010-11-01 15:00:00', '2010-11-02 16:00:00'), JSON_PRETTY_PRINT); echo "\nExample 3: ", json_encode(getRange('2009-12-30 18:00:00', '2010-01-02 02:00:00'), JSON_PRETTY_PRINT);
Output for 7.1.25 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.27, 8.4.1 - 8.4.14
Example 1: [ [ "2010-11-07", "2010-11-07 10:00:00", "2010-11-08 00:00:00" ], [ "2010-11-08", "2010-11-08 00:00:00", "2010-11-09 00:00:00" ], [ "2010-11-09", "2010-11-09 00:00:00", "2010-11-09 19:00:00" ] ] Example 2: [ [ "2010-11-01", "2010-11-01 15:00:00", "2010-11-02 00:00:00" ], [ "2010-11-02", "2010-11-02 00:00:00", "2010-11-02 16:00:00" ] ] Example 3: [ [ "2009-12-30", "2009-12-30 18:00:00", "2009-12-31 00:00:00" ], [ "2009-12-31", "2009-12-31 00:00:00", "2010-01-01 00:00:00" ], [ "2010-01-01", "2010-01-01 00:00:00", "2010-01-02 02:00:00" ] ]

preferences:
148.84 ms | 410 KiB | 5 Q