Php DateTime时区格式时

Php DateTime时区格式时,php,datetime,datetime-format,Php,Datetime,Datetime Format,这是我在时区和日期时间方面遇到的一个奇怪的问题,我会尽量简短: var_dump($obj->getTime1()); var_dump($obj->getTime2()); 给我以下信息(可以,时区很好等等): 但当我想将(在完全相同的行上)格式化为字符串时: var_dump($obj->getTime1()->format(DateTime::ISO8601)); var_dump($obj->getTime2()->format(DateTime::

这是我在时区和日期时间方面遇到的一个奇怪的问题,我会尽量简短:

var_dump($obj->getTime1());
var_dump($obj->getTime2());
给我以下信息(可以,时区很好等等):

但当我想将(在完全相同的行上)格式化为字符串时:

var_dump($obj->getTime1()->format(DateTime::ISO8601));
var_dump($obj->getTime2()->format(DateTime::ISO8601));
我得到:

string(24) "2016-03-28T19:00:00+0200"  <-- Noticed that it has a different timezone
string(24) "2016-03-13T19:00:00+0100"

你得到额外一小时的原因,是因为在3月的最后一个(完整的)周末,我们“改变”时区,跳过一小时

今年,这发生在3月27日,这意味着我们实际上将进入另一个时区。DateTime对象会自动为您执行此操作,这就是为什么您有两个不同的时区


与10月最后一个(完整)周末(10月30日)相反。

您获得额外一小时的原因是,在3月最后一个(完整)周末,我们“更改”时区,并跳过一小时

今年,这发生在3月27日,这意味着我们实际上将进入另一个时区。DateTime对象会自动为您执行此操作,这就是为什么您有两个不同的时区


10月最后一个(完整的)周末,即10月30日,时间将颠倒。

自1999年以来,欧盟对夏季时间的切换有以下规定:

  • 开始:三月的上周日
  • 完:10月的上周日
这意味着各国之间不需要续约或事先达成协议


你的例子恰好跨越了第一个界限。在法国,这意味着从(+0100)切换到(+0200)。PHP考虑到了这一点。

自1999年以来,欧盟对夏季时间的切换有以下规则:

  • 开始:三月的上周日
  • 完:10月的上周日
这意味着各国之间不需要续约或事先达成协议


你的例子恰好跨越了第一个界限。在法国,这意味着从(+0100)切换到(+0200)。PHP考虑到了这一点。

闻起来像DST(夏令时)…还有
var_dump($obj->getTime1()->date)
。你可能想要这个吗?@Anant:我需要ISO8601格式,就像@Naruta说的,2016-03-27夏令时将把我们到格林威治标准时间的距离改为1小时。你的两次约会处于转折点的不同侧面。字符串转换考虑到了这一点。在欧洲,时钟在3月27日星期日凌晨1点为“夏令时”前进,如DST(夏令时)…还有
var_dump($obj->getTime1()->date)
。你可能想要这个吗?@Anant:我需要ISO8601格式,就像@Naruta说的,2016-03-27夏令时将把我们到格林威治标准时间的距离改为1小时。你的两次约会处于转折点的不同侧面。字符串转换考虑到了这一点。3月27日星期日凌晨1点,欧洲的“夏令时”时钟向前移动谢谢你的回答
string(24) "2016-03-28T19:00:00+0200"  <-- Noticed that it has a different timezone
string(24) "2016-03-13T19:00:00+0100"
 $someTime = clone $obj->getTime1();
 $someTime ->sub(new \DateInterval('P'.$days.'D'));
 $event->setTime2($someTime);