我在欧洲/维也纳时区约会:
2014-10-25 08:30:00
在太平洋/中途时区转换为:
2014-10-24 19:30:00
当我向前迈出一天时,转换后的小时会发生变化: 欧洲/维也纳
2014-10-26 08:30:00
太平洋/中途
2014-10-25 20:30:00
造成这种差异的原因是什么?
重现它的代码:
$date = new DateTime('2014-10-25 08:30:00', new DateTimeZone('Europe/Vienna'));
$date->setTimezone(new DateTimeZone('Pacific/Midway'));
var_dump($date->format('Y-m-d H:i:s'));
$date = new DateTime('2014-10-26 08:30:00', new DateTimeZone('Europe/Vienna'));
$date->setTimezone(new DateTimeZone('Pacific/Midway'));
var_dump($date->format('Y-m-d H:i:s'));
答案 0 :(得分:1)
这是夏令时相关的原因:
在欧洲/维也纳,时间在10月25日和26日晚上减少。这意味着在那个晚上还有1个小时..因为在欧洲/维也纳时区还有1个小时,太平洋/中途时区也将是1个小时..
如果您按小时07:30欧洲/维也纳,您将获得与原始相同的结果..
欧洲/维也纳与太平洋/中途之间的时差= 13小时。
所以在第一个案例2014-10-25 08:30 - 13hrs == 2014-10-24 19:30。
25日= 2014-10-26 8:30 - 13hrs == 2014-10-25 19:30。
但是因为欧洲/维也纳在10月25日和26日晚上有DST,你需要加1小时..所以这就是为什么它是2014-10-25 20:30
我希望你现在明白了吗?