2012-01-07 247 views
2

我跑這個腳本:不同的時區有相同的時間戳?

echo date_default_timezone_get()."\n"; 
echo "----\n"; 

date_default_timezone_set('Asia/Kabul'); 
echo date_default_timezone_get()."\n"; 
echo "----\n"; 

echo time()."\n"; 
$dt = new DateTime; 
echo $dt->format('U') . "\n"; 
echo "----\n"; 

date_default_timezone_set('UTC'); 
echo date_default_timezone_get()."\n"; 
echo "----\n"; 

echo time()."\n"; 
$dt = new DateTime; 
echo $dt->format('U') . "\n"; 

,併爲所有的4個時間戳值,它說:1325905766

我在某處讀到新的DateTime始終將UTC設置爲時區,無論時區設置如何,所以我明白了,但time()怎麼辦?

幾秒前,在另一臺服務器上(可能不在歐洲(ideone.com)),它返回4次:1325905723

這是一樣的! (顯然差幾秒,但同一時區。)

time()始終只返回UTC?這是怎麼回事??

+0

不久前我遇到了類似的問題。我試圖根據每個用戶設置時區(通過配置文件中的設置),但是它會通過'date()'函數更改最後的時區標識符。這實際上並沒有改變*時間*本身。 – animuson 2012-01-07 03:27:28

+0

[PHP的時間()是否返回GMT/UTC時間戳?](http://stackoverflow.com/questions/4812170/does-php-time-return-a-gmt-utc-timestamp) – deceze 2012-01-07 03:36:58

回答

6

是的,他們都使用UTC。具體來說,time()U格式都會返回自1970年1月1日午夜以來流逝的非閏秒數(「Unix時代」)。由於曆元是一個定義與用戶的時區無關的固定點,並且自此以後的秒數在所有時區都相同(忽略相對論效應和其他因素),因此無論時區設置如何,time()都會返回相同的值。

+0

什麼是非閏秒? – Rudie 2012-01-07 15:35:14

+3

@Rudie:秒鐘不是[閏秒](http://en.wikipedia.org/wiki/Leap_second)。 – jwodder 2012-01-07 19:54:41

+0

呃...所以UTC實際上是34秒關閉!?奇怪的。不知道這些從無到有創造的神祕秒數。 – Rudie 2012-01-07 22:14:26

6

time()返回自1970年1月1日以來的秒數00:00:00 GMT

無論您是在亞洲/喀布爾還是Hither/Yon,從特定時間點開始經過的秒數都是相同的。

相關問題