Должен ли я переписать PHP DateTime с DateTimeZone впоследствии явно? - PullRequest
3 голосов
/ 08 июня 2011

Я получаю время:

0001-01-01T00:00:00.000Z
Greenwich Mean Time

Я сохраняю это в DateTime как:

$event->startTime = new DateTime($item->startTime, new DateTimeZone('GMT'));

Что дает мне:

  protected 'startTime' => 
    object(DateTime)[137]
      public 'date' => string '0001-01-01 00:00:00' (length=19)
      public 'timezone_type' => int 2
      public 'timezone' => string 'Z' (length=1)

Что означает этоигнорирует часовой пояс.Из документов:

Примечание:

Параметр $ timezone и текущий часовой пояс игнорируются, когда параметр $ time либо является меткой времени UNIX (например, @ 946684800), либо указывает часовой пояс(например, 2010-01-28T15: 00: 00 + 02: 00).

Если впоследствии я переопределю его:

$event->startTime->setTimezone(new DateTimeZone('GMT'));

Я получу:

  protected 'startTime' => 
    object(DateTime)[137]
      public 'date' => string '0001-01-01 00:00:00' (length=19)
      public 'timezone_type' => int 3
      public 'timezone' => string 'UTC' (length=3)

Итак, ответ говорит, что часовой пояс должен быть GMT / UCT, который равен +0, но PHP принимает решение tl;dr , и я получаю по умолчанию часовой пояс php.ini +2.Разве это не неправильно?

В любом случае, я буду использовать время начала в качестве обратного отсчета, поэтому часовой пояс имеет решающее значение.Мой вопрос: правильно ли мне переписать часовой пояс на UCT?Это даст мне правильное время, когда я собираюсь использовать DateTime :: diff?

1 Ответ

0 голосов
/ 08 июня 2011

В документации говорится, что вы не должны использовать GMT в качестве действительного часового пояса для класса DateTimeZone.

Возможно, можно будет удалить Z и указать часовой пояс, когдасоздание DateTime, чтобы конструктор не игнорировал часовой пояс.

$startTime = new DateTime('0001-01-01T00:00:00.000', new DateTimeZone('UTC'));

Было бы проще сохранить все как UTC, в противном случае выполнение кода в разных часовых поясах или когда влияет летнее время может потенциально может вызвать непредвиденные проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...