的下面幾行代碼返回在兩個不同的服務器組成的兩個不同的輸出和B:PHP的strtotime行爲
echo date("M Y", strtotime("2015-01"));
echo date("M Y", strtotime("2015-02"));
預期輸出爲「2015年1月」和「2015年2月」,這是在服務器A正確。
但服務器B上相同的代碼返回輸出「簡2015」和「2015年3月」。
在調試時,我發現服務器B上的strtotime
函數總是返回每個月當前日期的時間戳(今天是29日),這就解釋了爲什麼「2015-02」顯示爲「2015年3月」(因爲沒有2015年2月29日)。昨天,該代碼是返回兩臺服務器上相同的輸出,因爲2月28日是有效的,正確翻譯爲二月2015年
所以基本上,在服務器A上,有效的代碼是
echo date("M Y", strtotime("2015-01-01"));
echo date("M Y", strtotime("2015-02-01"));
,而在服務器B,有效的代碼是
echo date("M Y", strtotime("2015-01-29")); //or, strtotime("2015-01-[current day]")
echo date("M Y", strtotime("2015-02-29"));
爲什麼會出現這兩個服務器之間的這種差異?
時區差異。這是爲什麼你不應該像這樣濫用'strtotime()'的原因之一。 – Sammitch
@Sammitch你很快......;) –
@Sammitch我不認爲這是時區問題。任何時區如何能與其他時區相隔29天?正如我所提到的,它假設服務器B上當月的當天。 –