This handy function lets you specify a start date, an end date, an incremental value (e.g. 1 day) and a date format and returns the full range as an array.
function getDateRange($start, $end, $step, $format) {
$dateRange = [];
$current = strtotime($start);
$end = strtotime($end);
while ($current <= $end) {
$dateRange[] = date($format, $current);
$current = strtotime($step, $current);
}
return $dateRange;
}
print_r(getDateRange('2019-01-01', '2019-01-31', '+1 day', 'j M Y'));
print_r(getDateRange('1 January 2019', '31 December 2019', '+1 month', 'Y-m-d'));
/*
Outputs:
Array
(
[0] => 1 Jan 2019
[1] => 2 Jan 2019
[2] => 3 Jan 2019
[3] => 4 Jan 2019
[4] => 5 Jan 2019
[5] => 6 Jan 2019
[6] => 7 Jan 2019
[7] => 8 Jan 2019
[8] => 9 Jan 2019
[9] => 10 Jan 2019
[10] => 11 Jan 2019
[11] => 12 Jan 2019
[12] => 13 Jan 2019
[13] => 14 Jan 2019
[14] => 15 Jan 2019
[15] => 16 Jan 2019
[16] => 17 Jan 2019
[17] => 18 Jan 2019
[18] => 19 Jan 2019
[19] => 20 Jan 2019
[20] => 21 Jan 2019
[21] => 22 Jan 2019
[22] => 23 Jan 2019
[23] => 24 Jan 2019
[24] => 25 Jan 2019
[25] => 26 Jan 2019
[26] => 27 Jan 2019
[27] => 28 Jan 2019
[28] => 29 Jan 2019
[29] => 30 Jan 2019
[30] => 31 Jan 2019
)
Array
(
[0] => 2019-01-01
[1] => 2019-02-01
[2] => 2019-03-01
[3] => 2019-04-01
[4] => 2019-05-01
[5] => 2019-06-01
[6] => 2019-07-01
[7] => 2019-08-01
[8] => 2019-09-01
[9] => 2019-10-01
[10] => 2019-11-01
[11] => 2019-12-01
)
*/
It also works with times. E.g. getDateRange('10:30:14', '11:55:14', '+1 minute', 'H:i:s')
, getDateRange('10:30:14', '10:32:01', '+1 second', 'H:i:s')
.
