0
當我在5月(31日)的最後一天執行以下操作時,發生了一些奇怪的行爲。如果我將系統時間更改爲5月30日或6月(30日)的最後一天,則它的功能正常。在31天月底調用DateTime時發生月份重複
由於某些原因,但在31日,它將跳過下個月(6月),而是將其替換爲7月份。所以它會輸出7月兩次。下面是一個例子:其產生上述
<?php
$datepicker_month_range = 3;
// create an array of dates for a number of months specified by the user. 0 is used for this month
for ($month = 0; $month <= $datepicker_month_range; $month++) {
$dt_dates = new DateTime();
$dt_dates->add(new DateInterval("P{$month}M")); // example, P1M == plus 1 month
$days_in_month = cal_days_in_month(CAL_GREGORIAN, $dt_dates->format('m'), $dt_dates->format('Y'));
echo $days_in_month." days in ".$dt_dates->format('m').", ";
for ($day = 1; $day <= $days_in_month; $day++) {
$date = $dt_dates->format('Y')."-".$dt_dates->format('m')."-".sprintf('%02d', $day); // leading zeros 05-..
$month_days[] = $date;
}
}
//print_r($month_days);
?>
稍後,如果運行print_r($month_days)
,完整的日期被輸出與七月輸出兩次像在前面的表達式
31 days in 05, 31 days in 07, 31 days in 07, 31 days in 08,
代碼。
是什麼導致了這種行爲?
謝謝。
[見例如#3:添加個月時提防](http://php.net/manual/en/datetime.add.php#refsect1-datetime。添加示例) –
這是添加月份時的預期行爲。如果日期是「5月31日」,並且您添加了1個月,則它會將月份值從「05」增加到「06」,但這一天保持不變。由於沒有「31-Jun」,那麼就會翻到「01-Jul」。所有的日期/時間函數將「翻轉」這樣的無效值。 '40-Jun'被認爲是'6月最後一天過後的10天',並將轉到'7月10日'。 –
謝謝,我現在看到問題了。我想更簡單的修復方法是將日期回滾到1st,然後修改依賴於當前日期的後續代碼。 – user3442612