0
所以,我正在減去相對的月份。根據文檔:PHP相對月沒有產生預期結果
相對月份值是根據它們經過的月份的長度計算的。一個例子是「2011年2月30日+2月」,這將產生「2012-01-30」。這是由於11月份爲30天,而12月份爲31天,共計61天。
我明白了爲什麼例如添加個月的時候,但我不明白爲什麼2014-12-31 -1 month
產生2014-12-01
。在12月的31天裏,不應該是11月的最後一天?
示例代碼。功能1產生的結果我是從功能2和3的預期
//Func 1
$date = '2014-12-31 23:59:59'; //YYYY-MM-DD
$days = 0;
echo $date.'<br>';
for ($i = 1; $i < 13; $i++) {
$days += cal_days_in_month(CAL_GREGORIAN, (13-$i), 2014);
echo date("Y-m-d H:i:s", strtotime("-$days days", strtotime($date))).'<br>';
}
echo "<br><br>";
//Func 2
$date = '2014-12-31 23:59:59'; //YYYY-MM-DD
echo $date.'<br>';
for ($i = 1; $i < 13; $i++) {
echo date("Y-m-d H:i:s", strtotime("-$i months", strtotime($date))).'<br>';
}
//Func 3
echo "<br><br>";
$dateObj = new DateTime("2014-12-31 23:59:59");
echo $dateObj->format("Y-m-d H:i:s").'<br>';
$dateIntervalObj = new DateInterval("P1M");
for ($i = 0; $i < 12; $i++) {
echo $dateObj->format("Y-m-d H:i:s").'<br>';
$dateObj->sub($dateIntervalObj);
}
結果:
2014-12-31 23:59:59
2014-11-30 23:59:59
2014-10-31 23:59:59
2014-09-30 23:59:59
2014-08-31 23:59:59
2014-07-31 23:59:59
2014-06-30 23:59:59
2014-05-31 23:59:59
2014-04-30 23:59:59
2014-03-31 23:59:59
2014-02-28 23:59:59
2014-01-31 23:59:59
2013-12-31 23:59:59
2014-12-31 23:59:59
2014-12-01 23:59:59
2014-10-31 23:59:59
2014-10-01 23:59:59
2014-08-31 23:59:59
2014-07-31 23:59:59
2014-07-01 23:59:59
2014-05-31 23:59:59
2014-05-01 23:59:59
2014-03-31 23:59:59
2014-03-03 23:59:59
2014-01-31 23:59:59
2013-12-31 23:59:59
2014-12-31 23:59:59
2014-12-31 23:59:59
2014-12-01 23:59:59
2014-11-01 23:59:59
2014-10-01 23:59:59
2014-09-01 23:59:59
2014-08-01 23:59:59
2014-07-01 23:59:59
2014-06-01 23:59:59
2014-05-01 23:59:59
2014-04-01 23:59:59
2014-03-01 23:59:59
2014-02-01 23:59:59
爲什麼這看起來超級怪異2014-03-31 23:59:59 -1 month => 2014-03-03 23:59:59'? – user3332631 2014-12-05 05:50:59
哦,很好,很好的想法!看起來像現在的PHP中的錯誤 - 如果日期不存在,他們將缺少的天數添加到下個月的開始並使用它。所以如果沒有31,使用1st。如果沒有30號或29號,請使用第2號?這不再有意義。 – Andras 2014-12-05 05:58:36
這不是一個錯誤。這就是PHP開發人員決定如何處理這個問題的方式。無論如何,這樣做對某人來說是錯誤的。 – vascowhite 2014-12-05 06:05:21