Php 迭代日期不会显示该月的31日

Php 迭代日期不会显示该月的31日,php,date,datetime,for-loop,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->form

我有这段代码要迭代一个月

$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/>";
}
$begin2=新日期时间('2017-08-01');
$end2=新日期时间('2017-08-31');
$interval=DateInterval::createFromDateString('1天');
$period=newdateperiod($begin2,$interval,$end2);
foreach(期间为$i){
echo$i->格式(“Y-m-d”)。“
”; }
我也试过:

$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/>";
 }
$begin=新日期时间('2017-08-01');
$end=新日期时间(“2017-08-31”);
对于($i=$begin;$begin modify(“+1天”)){
echo$i->格式(“Y-m-d”)。“
”; }

这两个月我都得到了相同的结果,它跳过了8月31日,它在其他月份也能正常工作,我很困惑,不知道会发生什么。

如果你在$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/>";
}
$begin2=新日期时间('2017-08-01');
$end2=新日期时间('2017-08-31 12:00')//我把终点定在中午。除了空的或00:00以外,任何时间都可以工作
$interval=DateInterval::createFromDateString('1天');
$period=newdateperiod($begin2,$interval,$end2);
foreach(期间为$i){
echo$i->格式(“Y-m-d”)。“
”; }

您的第二个示例包括第31个示例。您的第一个示例没有这样做,因为当下一个
DateTime
大于或等于end
DateTime
时,
DatePeriod
停止:为了帮助实现这一点,您可以在该期间内使结束值晚于所需值,例如,对于您来说,该期间希望达到
2017-08-31 00:00:00
(午夜)因此,请使用更晚的日期/时间,如
2017-08-31 00:00:01
。谢谢你让我明白了,我做错了什么。拇指仰卧起坐