PHP 遍历时间段内的所有日期

阅读(8190)

结合使用DateIntervalDatePeriod等,就能轻易实现从某个时间段之间的所有日期,不用考虑繁琐的跨年、跨月、闰年等问题了。这种场景在一些数据报表的需求中常见,比如需要列举从XX月YY日到XX月ZZ日的每一天的用户访问数据。

代码如下:


$begin = new \DateTime( '2015-08-31' );
$end = new \DateTime( '2015-09-02' );
$end = $end->modify( '+1 day' );  // 不包含结束日期当天,需要人为的加一天

$interval = new \DateInterval('P1D');
//$interval = \DateInterval::createFromDateString('1 day');  // 等同于上一条

// 如果第4个参数为\DatePeriod::EXCLUDE_START_DATE,则不包含开始日期当天
$daterange = new \DatePeriod($begin, $interval ,$end);

foreach($daterange as $date){
    echo $date->format("Ymd") . "<br>";
}

echo '<pre>';
$dates = iterator_to_array($daterange);
print_r($dates);
echo '</pre>';

输出结果为:

20150831
20150901
20150902
Array
(
    [0] => DateTime Object
        (
            [date] => 2015-08-31 00:00:00.000000
            [timezone_type] => 3
            [timezone] => PRC
        )

    [1] => DateTime Object
        (
            [date] => 2015-09-01 00:00:00.000000
            [timezone_type] => 3
            [timezone] => PRC
        )

    [2] => DateTime Object
        (
            [date] => 2015-09-02 00:00:00.000000
            [timezone_type] => 3
            [timezone] => PRC
        )

)

via: http://php.net/manual/zh/class.dateperiod.php

Tags: