【问题标题】:PHP $date->format(DateTime::ISO8601) returning different timezone offsetPHP $date->format(DateTime::ISO8601) 返回不同的时区偏移
【发布时间】:2017-10-04 03:50:23
【问题描述】:

好吧,我被难住了。这是我拥有的两个日期对象:

// $startDate value
DateTime::__set_state(array(
   'date' => '2017-11-05 00:00:00.000000',
   'timezone_type' => 3,
   'timezone' => 'America/Chicago',
))

// $endDate value
DateTime::__set_state(array(
   'date' => '2017-11-05 23:59:00.000000',
   'timezone_type' => 3,
   'timezone' => 'America/Chicago',
))

它们都有完全相同的时区信息。但是,当我运行 $startDate->format(DateTime::ISO8601)$endDate->format(DateTime::ISO8601) 时,我得到不同的时区偏移量。

// $startDate->format(DateTime::ISO8601)
2017-11-05T00:00:00-0500

// $endDate->format(DateTime::ISO8601)
2017-11-05T23:59:00-0600

知道是什么原因造成的吗?

【问题讨论】:

  • 11 月 5 日是 DST 结束的那一天,因此 UTC 偏移量会发生变化。

标签: php datetime formatdatetime


【解决方案1】:

-0500-0600 DateTime::ISO8601 格式的不是时区,而是与 UTC 的偏移量。

从 2017 年 3 月 12 日星期日凌晨 2 点开始,与 UTC 的偏移量为 -6:00。 2017 年 11 月 5 日星期日凌晨 2 点,夏令时将关闭。从那时起,到下一次 DST 切换之前,偏移量将减少 1 小时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2017-04-24
    相关资源
    最近更新 更多