Как отформатировать дату 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" вручную в пользовательский формат времени?
Ответы
Ответ 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');
}