PHP: Loop through all months in a date range?

后端 未结 7 1076
误落风尘
误落风尘 2020-12-02 13:32

If I have a start date (say 2009-02-01) and an end date (say 2010-01-01), how can I create a loop to go through all the dates (months) in the range

7条回答
  •  难免孤独
    2020-12-02 14:04

    The accepted answer is not the proper way.

    I tried this snippet and it does not work properly. If your start date is the end of the month and the end date is the start of the 3rd month.

    For example: 2014-08-31 - 2014-10-01

    Expected should be.

    • August
    • September
    • October

    The better solution is:

    $start    = new DateTime('2010-12-02');
    $start->modify('first day of this month');
    $end      = new DateTime('2012-05-06');
    $end->modify('first day of next month');
    $interval = DateInterval::createFromDateString('1 month');
    $period   = new DatePeriod($start, $interval, $end);
    
    foreach ($period as $dt) {
        echo $dt->format("Y-m") . "
    \n"; }

    Reference: How to list all months between two dates

提交回复
热议问题