这是我遇到的一个奇怪的问题,我遇到过timezone和DateTime,我会保持简短:
SignInMessage
给我以下(好的,时区好等等):
var_dump($obj->getTime1());
var_dump($obj->getTime2());
但是当我想(在完全相同的行上)格式化为字符串时:
object(DateTime)#379 (3) {
["date"]=>
string(19) "2016-03-28 19:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Europe/Paris"
}
object(DateTime)#378 (3) {
["date"]=>
string(19) "2016-03-13 19:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(12) "Europe/Paris"
}
我明白了:
var_dump($obj->getTime1()->format(DateTime::ISO8601));
var_dump($obj->getTime2()->format(DateTime::ISO8601));
我讨厌DateTime
P.S:当我创建第二个DateTime对象时,我克隆第一个并添加一个DateInterval:
string(24) "2016-03-28T19:00:00+0200" <-- Noticed that it has a different timezone
string(24) "2016-03-13T19:00:00+0100"
答案 0 :(得分:4)
你获得额外一小时的原因是因为在3月的最后一个(完整)周末,我们“改变”时区,并且跳过一个小时。
今年,这发生在3月27日,这意味着我们实际上是在另一个时区设置的。 DateTime对象会自动为您执行此操作,这就是您有两个不同时区的原因。
将在10月30日的最后一个(完整)周末逆转。
答案 1 :(得分:1)