我试图像这样获得时区偏移
$zone = new DateTimeZone('Europe/Oslo');
$c = new DateTime(null, $zone);
$offset = $c->getOffset();
$transitions = $zone->getTransitions(time(), time());
echo '<pre>',print_r($transitions),'</pre>';
以秒为单位返回偏移量,这很好。但是这个偏移对于时区&太平洋/斐济来说并不正常。对于斐济来说,它返回46800(即GMT + 13),这是不对的,应该是43200.谷歌称斐济是GMT +12 here。我甚至尝试将默认时区设置为欧洲/伦敦或UTC,但斐济的偏移仍然不对。夏令时标志($ transitions数组中的isdst索引)对于斐济是活跃的,我认为在斐济的情况下它们应该是假的,因为他们的夏令时刚刚结束。很少有其他时区也像美国/亚松森,美国/坎波格兰德,美国/圣保罗,澳大利亚/阿德莱德等一样活跃,但他们所有的抵消都是正确的。
为什么斐济的抵消仍然显示GMT + 13而不是GMT + 12?我整天搜索论坛而不是一条线索。
P.S。斐济:当地日光时间即将到达2015年1月18日星期日时,03:00:00时钟倒退1小时至2015年1月18日星期日,当地标准时间02:00:00。
答案 0 :(得分:1)
此更改已在2015年版IANA tz数据库(release notes here)中颁布。对于PHP,您可以在the timezonedb pecl package的2015.7版中找到它。这是在2015-10-03发布的,PHP总是在每次PHP发布之前获取最新的timezonedb。因此,如果您更新到PHP版本5.6.14或更高版本(或开发预览轨道上的7.0.0 RC5),那么您将自动进行更改。否则,您可以update timezonedb manually。
通常,如果您的应用程序依赖于本地时间的准确性(尤其是计划方案),那么您应该订阅公告邮件列表at IANA,以便了解可能会影响您的更改系统,然后监视进入库,框架和操作系统的下层更改,以确保及时应用它们。否则,您可能会遇到与您描述的不一致的风险。