3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * @param string $start * @param string $end * * @return string[] */ function date_period_grid($start, $end) { $start = new DateTime($start); $end = new DateTime($end); $interval = $end->diff($start); $days = $interval->days; $months = $interval->y * 12 + $interval->m; $years = intval($end->format('Y')) - intval($start->format('Y')); if ($years > 1) { $period = new DatePeriod($start, new DateInterval('P1Y'), $years); $format = 'Y'; } elseif ($months > 1) { $period = new DatePeriod($start, new DateInterval('P1M'), $months); $format = 'm.Y'; } else { $period = new DatePeriod($start, new DateInterval('P1D'), $days); $format = 'd.m.Y'; } $result = []; foreach ($period as $date) { $result[] = $date->format($format); } return $result; } var_dump(date_period_grid('2012-07-01', '2015-11-01')); var_dump(date_period_grid('2015-01-01', '2015-11-01')); var_dump(date_period_grid('2015-10-01', '2015-11-01'));

preferences:
19.98 ms | 402 KiB | 5 Q