2013-03-22 170 views
0

如果date()格式化本地時間/日期,並且gmdate()格式化GMT/UTC日期/時間,爲什麼這是真的?爲什麼本地時間戳等於UTC時間戳?

date_default_timezone_set('America/Los_Angeles'); 
var_dump(date('U') === gmdate('U')); // true 

在命令行:

$ php -r "date_default_timezone_set('America/Los_Angeles'); var_dump(date('U') === gmdate('U'));" 
bool(true) 

爲什麼本地時間戳等於UTC時間戳不同的時區?

+1

時間戳總是UTC。格式化日期根據時區設置進行本地化。 – mario 2013-03-22 01:59:14

回答

4

因爲時間戳是Unix Epoch(1970年1月1日00:00:00 GMT)以來的秒數。注意GMT時間?不管你在什麼時區,時間戳都是相對於那個時間和時區。

你真正想要做的是:

$local = new DateTime(); 
$local->setTimeZone(new DateTimeZone('America/Los_Angeles')); 
$gmt = new DateTime(); 
$gmt->setTimeZone(new DateTimeZone('UTC')); 
var_dump($local === $gmt); 
+0

您的意思是$ gmt-> setTimeZone(new DateTimeZone('UTC')); ? – SoTes 2013-03-22 02:06:47

+0

是的。謝謝你收到。 – 2013-03-22 02:08:01

+0

感謝您的幫助!有道理,爲什麼沒有'gmtime()' – SoTes 2013-03-22 05:09:43