2016-04-29 98 views
2

我運行一個簡單的測試,比較date()和gmdate()的輸出,我對結果感到困惑。我瞭解功能之間的區別,但是,服務器設置爲GMT時間,所以我期望結果是相同的。date()和gmdate()返回不同的結果

我檢查了時區設置,他們似乎很好。我懷疑這與日間儲蓄有關。

我很期待輸出是相同的嗎?

if (date_default_timezone_get()) { 
    echo 'date_default_timezone_set: ' . date_default_timezone_get() . '<br />'; 
} 

echo '<br>Full date '.date("Y-m-d H:i:s T I"); 
echo '<br>Full date GM '.gmdate("Y-m-d H:i:s T I"); 

$now = date("Y-m-d H:i:s T I"); 
$tempDate = $startWeek = time(); 

$date = new DateTime(); 
$tempDateU = $date->format('U'); 

$tempDate = $startWeek = time(); 
echo '<br>Date: '.date("d/m/y H:i", $tempDate); 
echo '<br>GM Date: '.gmdate("d/m/y H:i", $tempDate); 

echo '<br>Date: '.date("d/m/y H:i", $tempDateU); 
echo '<br>GM Date: '.gmdate("d/m/y H:i", $tempDateU); 

輸出:

date_default_timezone_set: Europe/London 

Full date 2016-04-29 11:35:55 BST 1 
Full date GM 2016-04-29 10:35:55 GMT 0 
Date: 29/04/16 11:35 
GM Date: 29/04/16 10:35 
Date: 29/04/16 11:35 
GM Date: 29/04/16 10:35 
+1

'歐洲/倫敦'!='GMT' – CBroe

+1

看起來像服務器設置爲'歐洲/倫敦',其*目前不是* GMT,但BST(英國夏令時)=> GMT + 1 – CD001

回答

2

*警告:date_default_timezone_get():依靠系統的時區設置是不安全的。您需要使用date.timezone設置或date_default_timezone_set()函數*

因此,你需要設置當前時區,以確保自己在做什麼。

date_default_timezone_set('Europe/London'); 

或者

date_default_timezone_set('UTC'); 

如前所述,歐洲/倫敦不同於GMT/UTC。

提醒:格林威治標準時間沒有DST,它總是同時。歐洲/倫敦有DST。這就是爲什麼我在gmdate給出0

+0

好的,這是有道理的。不知道格林尼治標準時間沒有考慮到夏令時。 – Revover

+0

很高興閱讀:http://www.timeanddate.com/time/zones/gmt –

1

是,夏令時是導致此。 因此日期()表示BST 1和gmdate()表示格林威治標準時間0.

因此,不確定爲什麼,將查看它。可能因爲時區是倫敦,所以它在BST。