strtotime() 为字符串 “now” 返回不同时区的不同 Unix 时间戳


strtotime() returns different Unix timestamp in different timezones for string "now"

php > echo strtotime("now America/New_York")."'n";
1376459035 // -> 2013-08-14 05:43:55 - Wrong
php > echo strtotime("now UTC")."'n";
1376444635 // -> 2013-08-14 01:43:55 - OK
php > echo time()."'n";
1376444635 // -> 2013-08-14 01:43:55 - OK

谁能解释一下?

这是PHP的发明 - 时区 - "更正"unix时间戳吗?

//编辑:

我意识到甚至用"现在"指定时区也是没有意义的。但是,它与其他相关时间相同,例如"明天午夜"。在那里,根据时区的不同,"明天"可能会更远一天,这取决于时区是否已经过了午夜。这种行为同样奇怪,只是有点难以解释。

正如Unix时间wiki所解释的,Unix Epoch总是在UTC中。这就是为什么输出

echo strtotime("now UTC");
echo time();

都是一样的。根据这个信息纽约时区是UTC -5 hours。当前夏令时 +1 现在同样UTC -4 hours .这就是为什么你得到结果2013-08-14 05:43:55(4小时差异(。

您正在使用 strtotime("now America/New_York")这就是为什么它为字符串显示不同时区的 unix 时间戳。

使用这个:

date_default_timezone_set("America/New_York");