关于datetime:太平洋/斐济的Php夏令时问题

Php Daylight saving issue with Pacific/Fiji

我想把时区偏移量调成这样

1
2
3
4
5
$zone = new DateTimeZone('Europe/Oslo');
$c = new DateTime(null, $zone);
$offset = $c->getOffset();
$transitions = $zone->getTransitions(time(), time());
echo '[cc lang="php"]',print_r($transitions),'

;< /代码>

返回以秒为单位的偏移量。但对于"太平洋/斐济"时区,这种偏移无法正常工作。对于斐济,它返回46800(即格林尼治标准时间+13),这是不对的,应该是43200。谷歌说斐济是格林尼治标准时间+12。我甚至尝试将默认时区设置为欧洲/伦敦或UTC,但斐济的时差仍然不正确。对于斐济,日光节约标志($transitions数组中的isdst索引)是活动的,我认为如果斐济的日光节约刚刚结束,那么它应该是错误的。几乎没有其他时区像美国/亚松森、美国/坎波格兰德、美国/圣保罗、澳大利亚/阿德莱德等启用DST,但它们的所有偏移都是正确的。

斐济的时差仍然显示格林尼治标准时间+13而不是格林尼治标准时间+12,有什么原因吗?我一整天都在搜索论坛,一点线索也没有。

P.S.斐济:当当地夏令时即将到达2015年1月18日星期日时,03:00:00时钟倒转1小时,改为2015年1月18日星期日02:00:00当地标准时间。


斐济的DST过渡期结束(他们的"回落"过渡期)最近在基础数据中发生了变化。它原本定于1月24日结束,但在一周前移到1月17日,以配合斐济政府的公告。

此更改是在IANA TZ数据库的2015G版本中制定的(此处为发行说明)。对于PHP,您可以在TimeZoneDB PECL包的2015.7版中找到它。这是在2015-10-03发布的,每次发布PHP之前,PHP都会获取最新的TimeZoneDB。因此,如果您更新到php 5.6.14或更高版本(或者dev preview track上的7.0.0rc5),那么您将自动进行更改。否则,可以手动更新TimeZoneDB。

一般来说,如果您的应用程序依赖于本地时间的准确性(尤其是调度方案),那么您应该订阅IANA上的公告邮件列表,以便了解可能影响系统的更改,然后观察库、框架和操作系统中的下层更改,以确保它们应用于及时处理。否则,您将面临与所描述的不一致的风险。