How to generate a date range with PHP

Josh Sherman
1 min read
Software Development PHP

From time to time I need to loop through a date range. One approach is to generate a start date and an end date and then add 1 day to the start date until it reaches the end date (or whatever interval you want to increment by). This works wonders thanks to strtotime:

$start = '2014-12-07';
$end   = '2014-12-31';

while ($start <= $end) {
    // Do something with the date here...

    // Increment the date
    $start = strtotime($start . ' +1 day');

If you wanted to do this in a more object-oriented way, and you are using PHP 5.3+, you can leverage the DatePeriod class. Combined with the DateTime and DateInterval classes you are able to achieve this:

$start = new DateTime('2014-12-07');
$end   = new DateTime('2014-12-31');
$range = new DatePeriod($start, new DateInterval('P1D'), $end);

foreach ($range as $date) {
    // Do something with the date here...

The code’s a bit shorter but is probably more memory intensive due to the use of objects. Like most things in PHP-land, the choice is yours based on how you want to implement things. Got another way to generate a date range? Comment below!

Join the Conversation

Good stuff? Want more?

Weekly emails about technology, development, and sometimes sauerkraut.

100% Fresh, Grade A Content, Never Spam.

About Josh

Husband. Father. Pug dad. Musician. Founder of Holiday API, Head of Engineering and Emoji Specialist at Mailshake, and author of the best damn Lorem Ipsum Library for PHP.

Currently Reading

Parasie Eve

Previous Reads

Buy Me a Coffee Become a Sponsor

Related Articles