我正在處理一些時間相關的功能,我選擇始終使用UTC時間並將時間戳存儲爲整數以保持一致性。PHP mktime和時區
但是,我注意到,當我使用mktime
時,似乎當前設置的時區具有返回值mktime
的影響。從文檔中我知道mktime
應該返回自發生以來的秒數:
返回與給定參數對應的Unix時間戳。這個 timestamp是一個長整數,包含Unix Epoch(1970年1月1日00:00:00 GMT)與指定的時間之間的 之間的秒數。
http://php.net/manual/en/function.mktime.php
然而,似乎是mktime
包括當前設置時區。如果使用下面的代碼:
date_default_timezone_set('UTC');
$time = mktime(0, 0, 0, 1, 1, 2016);
echo "{$time}\n";
date_default_timezone_set('Australia/Sydney');
$time = mktime(0, 0, 0, 1, 1, 2016);
echo "{$time}\n";
我希望這兩個時間瓦萊斯是相同的,但顯然他們都沒有:
1451606400
1451566800
這似乎是exacly 11小時的時差:
1451606400 - 1451566800 = 39600/(60*60) = 11
對於mktime
和/或爲什麼在使用mktime
時考慮的時區有什麼不正確理解?
Ouch。這很糟糕。他們所要做的就是在所有時間功能上始終使用UTC,並且只在「顯示」時間時才合併時區。我猜這是因爲PHP的「歷史」......感謝您的回答! – Luke