我目前使用DateTime的PHP和注意到在PHP的DateTimeZone对象的转换时间似乎是不正确的。我只用“美国/哈瓦那”时区进行了测试,所以我不确定这是否是一个问题。PHP DateTimeZone转换似乎是不正确
这方面的一个很好的例子是在这里:
var_dump((new DateTimeZone("America/Havana"))->getTransitions());
如果“CTRL-F”并查找“2016年3月13日”你会发现,它说的转变发生在5: 00 AM在2016年3月13日,实际上它应该是在2016年3月13日上午7:00。
我已经尝试通过安装外部TimeZone数据库(timezonedb与pecl准确),但问题似乎仍然存在。我需要这个固定的原因是因为它似乎与我的日期时间对象搞乱,它不是它应该如何行事。例如,它似乎是添加随机小时,如果你试图建立这个日子:
$̶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̶.̶不管怎么说,如果任何人可以帮助这将是不可思议的。
UPDATE
我还没有解决这个问题,但是我似乎已经错了的上述例子中的一个。现在的问题似乎是,
$test = new DateTime("2013-03-13 00:30:00", new DateTimeZone("America/Havana"));
var_dump($test->getOffset());
好像是返回-14400,因为它认为,当实际上它应该返回-18000因为DST还不发生DST已经发生。
你的问题是否可以由夏令时导致? – m69
问题是我的PHP TimeZone DB似乎没有包含上面提到的正确的转换日期。这似乎是2个小时了,这就是问题所在。 – startingwars