2017-09-01 64 views
-1

月31日我有這樣的代碼,通過一個月的迭代通過日期迭代犯規顯示月份

$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日,它與其他幾個月一起工作,我很困惑,不知道會發生什麼。

+2

你的第二個例子中不包括31日。你的第一個例子不會,因爲DatePeriod在下一個DateTime大於*或等於* DateTime結束時停止:爲了解決這個問題,你可以使結束值晚於期望值例如對你來說,這段時間想要'2017-08-31 00:00:00'(午夜),所以請使用'2017-08-31 00:00:01'之類的日期/時間。 – salathe

回答

1

如果你var_dump $期間你看到問題。
你的結局是在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

+0

謝謝你讓我明白,我做錯了什麼。豎起大拇指 –

相關問題