Вы пытались создать DateTime
объект со смещением часового пояса +00
, поэтому он вернул смещение вместо действительного идентификатора часового пояса, что фактически означает GMT+0000
.Используя строку даты и времени без смещения, вы получите идентификатор часового пояса PHP в соответствии с текущей настройкой часового пояса в объекте DateTime (или системе).
С $third = '2011-04-27 16:20:12+00';
вы установили смещение +00:00
в объекте DateTime
вместо PHPидентификатор и DateTime
просто возвращают это обратно методом ->getName()
.
Фиксированное смещение не предоставляет информацию о правилах перехода на летнее время, поэтому его нельзя использовать для возврата идентификатора PHP TimeZone.Пример: в моей зоне это GMT+2
в данный момент (активное DST), но если я помещу его в строку datetime, объект DateTime не сможет узнать, когда мое смещение изменится на +1
, просто это всегда GMT + 0200 ...вот и все.
Смещение +00
в вашем случае соответствует множеству различных идентификаторов часовых поясов, таких как Atlantic/Reykjavík
, Africa/Casablanca
, Africa/Nouakchott
и т. д.
Именно поэтому getName() метод возвращает смещение времени вместо часового пояса!
Это не официальное объяснение, но оно в короткой версии.
Конечно, 2011-04-27 16:20:12+00
не является допустимой строкой даты и времени.