【发布时间】:2015-12-02 12:32:50
【问题描述】:
我目前在 PHP 中使用 DateTime,并注意到 PHP 的 DateTimeZone 对象中的转换时间似乎不正确。我只用“美国/哈瓦那”时区对此进行了测试,所以我不确定这是否是一个问题。
这里就是一个很好的例子:
var_dump((new DateTimeZone("America/Havana"))->getTransitions());
如果您“ctrl-f”并查找“2016-03-13”,您会注意到它表示转换发生在 2016 年 3 月 13 日 UTC 上午 5:00,而实际上应该是 7:00 2016 年 3 月 13 日上午 UTC。
我已尝试通过安装外部 TimeZone DB(准确地说是带有 pecl 的 timezonedb)来解决此问题,但问题似乎仍然存在。我需要这个修复的原因是因为它似乎弄乱了我的 DateTime 对象并且它没有按照它应该的方式运行。例如,它似乎是添加随机小时如果试图构建此特定日期:
$̶t̶e̶s̶t̶ ̶=̶ ̶n̶e̶w̶ ̶D̶a̶t̶e̶T̶i̶m̶e̶(̶"̶2̶0̶1̶3̶-̶0̶3̶-̶1̶3̶ ̶0̶0̶:̶3̶0̶:̶0̶0̶"̶,̶ ̶n̶e̶w̶ ̶D̶a̶t̶e̶T̶i̶m̶e̶Z̶o̶n̶e̶(̶"̶A̶m̶e̶r̶i̶c̶a̶/̶H̶a̶v̶a̶n̶a̶"̶)̶)̶;̶ ̶ ̶
如果您的var_dump上述变量,它会增加了一小时,这使得没有任何意义,我̶o̶p̶i̶n̶i̶o̶n̶.̶不管怎么说,如果有人能够帮助这将是令人难以置信的。 P>
更新
我还没有解决这个问题,但我似乎对上面的一个例子有误。现在的问题似乎是这样的
$test = new DateTime("2013-03-13 00:30:00", new DateTimeZone("America/Havana"));
var_dump($test->getOffset());
似乎返回 -14400,因为它认为 DST 已经发生,而实际上它应该返回 -18000,因为 DST 尚未发生。
【问题讨论】:
-
你的问题是由夏令时引起的吗?
-
问题是我的 PHP TimeZone DB 似乎不包含上述正确的转换日期。似乎要休息 2 个小时,这就是问题所在。
标签: php datetime transitions dst