【发布时间】:2017-09-01 19:12:32
【问题描述】:
我有这个代码要迭代一个月
$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 日,它确实适用于其他月份,我很困惑,不知道会发生什么。
【问题讨论】:
-
您的第二个示例确实包括第 31 个。您的第一个示例没有,因为当下一个
DateTime大于或等于结束DateTime时,DatePeriod停止:为了帮助解决这个问题,您可以将结束值设置为稍后比该期间所需的时间,例如对你来说,这个时期想要达到2017-08-31 00:00:00(午夜),所以使用更晚的日期/时间,比如2017-08-31 00:00:01。
标签: php date datetime for-loop