我将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
答案 0 :(得分:1)
致电timezone_name_from_abbr("", 10 * 3600, 0)
会返回Australia/Melbourne
。
墨尔本开始夏令时(又名"夏令时")on October 2, 2016。它将生效until April 2, 2017。
在标准时间,墨尔本是UTC + 10。在夏令时期间,墨尔本是UTC + 11。这解释了您的结果。
一般情况下,不要使用固定抵消,因为它们无法解释DST和其他历史差异。改为使用命名标识符。