datetime — ISO8601 Дата в PHP в формате YYYY-MM-DDTHH: MM: SS.mmmmmmmZ

Я пытаюсь сгенерировать метку времени в PHP для использования с API. Я не могу получить метку времени для форматирования, как это должно быть. Правильный формат:

UTC ISO8601 Формат даты и времени: YYYY-MM-DDThh: ММ: SS.mmmmmmmZ

Пример: 2013-04-24T11: 11: 50.2829708Z

Edit, позвольте мне уточнить по фактической проблеме, которую я имею:

Свойство Z возвращает смещение часового пояса в секундах. Мне нужно смещение, возвращаемое, поскольку дата (‘c’) возвращает его.

Пример:
+01: 00 вместо 3600

Есть ли встроенная функция для этого в PHP?

0

Решение

Вы ищете DateTime::format метод в сочетании с c форматтер или DateTime::ISO8601 постоянная:

$timestamp = new DateTime();
echo $timestamp->format('c'); // Returns ISO8601 in proper format
echo $timestamp->format(DateTime::ISO8601); // Works the same since const ISO8601 = "Y-m-d\TH:i:sO"
3

Другие решения

Чтобы напечатать дату в ISO 8601 в PHP вы можете использовать довольно простой процедурный стиль date() функционировать так:

$isoDate = date('c') // outputs 2017-10-18T22:44:26+00:00 'Y-m-d\TH:i:sO'

Или, если вы предпочитаете стиль ООП, то вы можете использовать DateTime() как это:

$date = DateTime('2010-01-01');
echo date_format($date, 'c');

Список формата / констант даты, предоставляемых PHP: упоминается здесь:

const string ATOM = "Y-m-d\TH:i:sP" ;
const string COOKIE = "l, d-M-Y H:i:s T" ;
const string ISO8601 = "Y-m-d\TH:i:sO" ;
const string RFC822 = "D, d M y H:i:s O" ;
const string RFC850 = "l, d-M-y H:i:s T" ;
const string RFC1036 = "D, d M y H:i:s O" ;
const string RFC1123 = "D, d M Y H:i:s O" ;
const string RFC2822 = "D, d M Y H:i:s O" ;
const string RFC3339 = "Y-m-d\TH:i:sP" ;
const string RSS = "D, d M Y H:i:s O" ;
const string W3C = "Y-m-d\TH:i:sP" ;

Так хорошо, что у нас есть формат ISO 8601. Однако значение может отличаться от ожидаемого (YYYY-MM-DDTHH:MM:SS.mmmmmmmZ). В соответствии с ISO 8601 Wikipedia page, это допустимые форматы:

2017-10-18T22:33:58+00:00
2017-10-18T22:33:58Z
20171018T223358Z

PHP, вероятно, предпочитает первый. У меня была несколько схожая проблема с датами между PHP и Javascript, потому что у Javascript один есть конечный Z в конце. Я закончил тем, что написал это, чтобы решить проблему:

$isoDate = date('Y-m-d\TH:i:s.000') . 'Z'; // outputs: 2017-10-18T23:04:17.000Z

ПРИМЕЧАНИЕ: причина, по которой у меня 3 знака после запятой, в том, что я заметил, что в формате Javascript используется этот формат, он может вам и не понадобиться.

0

По вопросам рекламы [email protected]