Search the blog

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').

Tim Bennett is a Leeds-based web designer from Yorkshire. He has a First Class Honours degree in Computing from Leeds Metropolitan University and currently runs his own one-man web design company, Texelate.