0

如果date()格式化本地时间/日期,并gmdate()格式化 GMT/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 时间戳?

4

1 回答 1

4

因为时间戳是自 Unix 纪元(格林威治标准时间 1970 年 1 月 1 日 00:00:00)以来的秒数。注意到格林威治标准时间了吗?无论您在哪个时区,时间戳都是相对于该时间和时区的。

你真正想做的是:

$local = new DateTime();
$local->setTimeZone(new DateTimeZone('America/Los_Angeles'));
$gmt   = new DateTime();
$gmt->setTimeZone(new DateTimeZone('UTC'));
var_dump($local === $gmt);
于 2013-03-22T01:59:20.857 回答