2014-01-08 28 views
0

我遇到了mktime的一個簡單問題。我發現下面的代碼:PHP mktime有時會返回錯誤的日期

echo date("Y-M-d", mktime(11, 45, 0, 01, 05, 2014)); echo ", "; 
echo date("Y-M-d", mktime(11, 45, 0, 01, 06, 2014)); echo ", "; 
echo date("Y-M-d", mktime(11, 45, 0, 01, 07, 2014)); echo ", "; 
echo date("Y-M-d", mktime(11, 45, 0, 01, 08, 2014)); echo ", "; 
echo date("Y-M-d", mktime(11, 45, 0, 01, 09, 2014)); echo ", "; 

正在生產輸出如下:

2014-Jan-05, 2014-Jan-06, 2014-Jan-07, 2013-Dec-31, 2013-Dec-31 

日期功能只是爲了使其更具可讀性;由mktime返回的時間戳本身是錯誤的。 只有變化的事情是每個月的某一天,所以我不知道爲什麼7天和8天之間會出現不連續性,或者爲什麼8天和9天都會返回。

我已經檢查過,小時,分鐘和秒不會改變錯誤的日子的結果,儘管他們確實改變了確切的時間戳。也就是說,上面的最後兩行返回完全相同的時間戳(1388508300),但如果我更改小時,則時間戳的相對更改與預期相同。

在上下文很重要的情況下,這是在WordPress安裝中的PHP 5.3中運行。

回答

8

整型常量開始0..符號。 08八進制或以上不存在,你會得到完全錯誤的值。 第五天是5,而不是05等。

5

擺脫前導零之前,你的天(個月)

echo date("Y-M-d", mktime(11, 45, 0, 1, 5, 2014)); echo ", "; 
echo date("Y-M-d", mktime(11, 45, 0, 1, 6, 2014)); echo ", "; 
echo date("Y-M-d", mktime(11, 45, 0, 1, 7, 2014)); echo ", "; 
echo date("Y-M-d", mktime(11, 45, 0, 1, 8, 2014)); echo ", "; 
echo date("Y-M-d", mktime(11, 45, 0, 1, 9, 2014)); echo ", "; 

See it in action

+2

和幾個月。當你到達08和09時,你也會遇到很大的問題。 – Jessica

+0

謝謝;當然,只要我點擊「提問」,我也會發生這種可能性。我不知道PHP中的前導零(常用於格式化日期!)被解釋爲八進制數。爲了完全正確,我必須從「01」(1月)中刪除前導零,否則我會在八月份遇到另一個問題。 – GJP

+0

@GJP'08'雖然不是日期,但它只是一個數字...... :) – deceze