2010-09-21 30 views
1

如果我運行在PHP以下:PHP mktime對於曆元返回-3600,而不是0

回波mktime(0,0,0,1,1,1970);

返回的值是-3600,而不是0,如我所料。

服務器是基於英國的,目前它是9月21日(即BST夏令時)(儘管我不希望這會影響時代的時間戳),並根據php.info:「默認時區歐洲/倫敦」。

設定夏令時標誌也,如下,得到:

回波mktime(0,0,0,1,1,1970,0); (即正確的DST標誌,0作爲1月1日不是DST/BST) 返回-3600

echo mktime(0,0,0,1,1,1970,1); (不正確的標誌 - 設置1月1日爲DST) 返回-7200

echo mktime(0,0,0,1,1,1970,-1); (即DST標誌未設置 - 留給PHP決定) 返回-3600

有沒有人知道爲什麼這個紀元會以-3600而不是0返回?

+1

爲['mktime'](HTTP的'is_dst'參數://ca.php .net/manual/en/function.mktime.php)已被棄用從PHP 5.1開始。 – 2010-09-21 18:00:32

回答

5

當它是1970年1月1日午夜在英國夏令時,它是格林威治標準時間午夜一小時。嘗試將時區設置爲UTC:

date_default_timezone_set('UTC'); // or just change php.ini 
+0

+1,然後我給出了更詳細/更好的解釋。 – Wrikken 2010-09-21 18:07:22

+0

嗨,太棒了,謝謝。我認爲很顯然1970年1月1日必須在格林尼治標準時間(即不是BST/DST - 僅在3月下旬 - 10月下旬有效),因此unix時間戳爲0 - 並未意識到日期被解釋爲與劇本在同一時區。我很高興我用BST編寫腳本,否則錯誤會被忽視,直到三月份的事情停止工作! – PHP 2010-09-21 18:24:32

+0

...剛剛發現了這個:http://en.wikipedia.org/wiki/British_Summer_Time - BST在1969/1970年冬季作爲試用生效 – PHP 2010-09-22 21:39:48

1

mktime()基於您當前的時區。如果您想創建基於GMT的時間戳,則必須使用gmmktime()函數。

gmmktime(0,0,0,1,1,1970) 

code on ideone


資源:

+0

謝謝,有用! – PHP 2010-09-21 18:25:39