Подтвердить что ты не робот

Как отформатировать дату UTC для использования указателя зоны Z (Zulu) в php?

Мне нужно отображать и обрабатывать даты UTC в следующем формате:

2013-06-28T22: 15: 00Z

Поскольку этот формат является частью стандарта ISO8601, у меня нет проблем с созданием объектов DateTime из строк, подобных приведенным выше. Однако я не могу найти чистый способ (что означает отсутствие строковых манипуляций, таких как substr и replace, и т.д.), Чтобы представить объект DateTime в нужном формате. Я попытался настроить настройки сервера и php datetime с небольшим успехом. Я всегда получаю:

$date->format(DateTime::ISO8601); // gives 2013-06-28T22:15:00+00:00

Есть ли формат даты или параметр конфигурации, который даст мне нужную строку? Или мне придется добавить "Z" вручную в пользовательский формат времени?

4b9b3361

Ответ 1

Нет, для желаемого формата нет специальной константы. Я бы использовал:

$date->format('Y-m-d\TH:i:s\Z');

Но вам нужно убедиться, что время, которое вы используете, действительно UTC, чтобы избежать ошибок интерпретации в вашем приложении.

Ответ 2

Чтобы получить дату UTC в нужном формате, вы можете использовать что-то вроде этого:

gmdate('Y-m-d\TH:i:s\Z', $date->format('U'));

Ответ 3

Чтобы сделать это с помощью объекта даты в объектно-ориентированном стиле, вам нужно сначала установить часовой пояс на UTC, а затем вывести дату:

function dateTo8601Zulu(\DateTimeInterface $date):string {
  return $date
    ->setTimezone(new \DateTimeZone('UTC'))
    ->format('Y-m-d\TH:i:s\Z');
}