如果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时间戳?
因为时间戳是从Unix纪元(1970年1月1日00:00:00 GMT)开始的秒数。注意到格林尼治时间了吗?无论您在哪个时区,时间戳都是相对于该时间和时区的。
你真正想做的是:
$local = new DateTime();
$local->setTimeZone(new DateTimeZone('America/Los_Angeles'));
$gmt = new DateTime();
$gmt->setTimeZone(new DateTimeZone('UTC'));
var_dump($local === $gmt);