迭代日期并不显示当月的第31个

时间:2017-09-01 19:12:32

标签: php date datetime for-loop

我有这个代码来迭代一个月

$begin2 = new DateTime( '2017-08-01' );
$end2 = new DateTime( '2017-08-31' );
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($begin2, $interval, $end2);
foreach ( $period as $i ){  
    echo $i->format("Y-m-d")."<br/>";
}

我也试过这个:

$begin = new DateTime( '2017-08-01' );
$end = new DateTime( '2017-08-31' );
 for($i = $begin; $begin <= $end; $i->modify('+1 day')){
    echo $i->format("Y-m-d")."<br/>";
 }

我得到了两个相同的结果,它跳过8月31日,它确实与其他几个月一起工作,我很困惑,不知道会发生什么。

1 个答案:

答案 0 :(得分:1)

如果你有var_dump $ period,你就会发现问题 您的结束时间是8月31日00:00。

如果您在当天晚些时候设定时间,则会输出日期。

$begin2 = new DateTime( '2017-08-01' );
$end2 = new DateTime( '2017-08-31 12:00' ); //I set the end at noon here. Any time should work except empty or 00:00
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($begin2, $interval, $end2);
foreach ( $period as $i ){  
    echo $i->format("Y-m-d")."<br/>";
}

https://3v4l.org/1n4W4