2013-03-22 171 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