Search code examples
phpdatetimeformatdatetime

PHP $date->format(DateTime::ISO8601) returning different timezone offset


Ok, i'm stumped. Here are two date objects i have:

// $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',
))

They both have the exact same timezone information. However when i run $startDate->format(DateTime::ISO8601) and $endDate->format(DateTime::ISO8601) I get different timezone offsets.

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

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

Any idea as to what may be causing this?


Solution

  • -0500 and -0600 in DateTime::ISO8601 format are not a timezones, but offsets from UTC.

    Starting from 2 am Sunday, 12 March 2017, the offset is -6:00 from UTC. At 2 am Sunday, 5 November, 2017 DST will be turned off. Since then the offset will be 1 hr less till next DST switchover.