如何纠正澳大利亚时区的工作

时间:2016-12-03 18:58:58

标签: php datetime timezone

我将UTC格式的日期存储在数据库中,用户也有小时偏移量

这是我的代码

$this->timezoneName = timezone_name_from_abbr("", 10 * 3600, 0);
$d = new \DateTime($date);
$d->setTimezone(new \DateTimeZone($this->timezoneName));
return $d->format("d.m.Y H:i");

所有工作正确,对于从0到+9的任何$偏移,但对于+10(澳大利亚),它返回偏移+11而不是+10的日期 如何解决?

更新 - 这里是更正确的代码

$this->timezoneName = timezone_name_from_abbr("", $offset * 3600, 0);
$d = new \DateTime('8.11.2016 10:00:00', new \DateTimeZone('UTC'));
    $d->setTimezone(new \DateTimeZone($this->timezoneName));
return $d->format("d.m.Y H:i");

我得到08.11.2016 21:00

1 个答案:

答案 0 :(得分:1)

致电timezone_name_from_abbr("", 10 * 3600, 0)会返回Australia/Melbourne

墨尔本开始夏令时(又名"夏令时")on October 2, 2016。它将生效until April 2, 2017

在标准时间,墨尔本是UTC + 10。在夏令时期间,墨尔本是UTC + 11。这解释了您的结果。

一般情况下,不要使用固定抵消,因为它们无法解释DST和其他历史差异。改为使用命名标识符。