Я пытаюсь сгенерировать метку времени в PHP для использования с API. Я не могу получить метку времени для форматирования, как это должно быть. Правильный формат:
UTC ISO8601 Формат даты и времени: YYYY-MM-DDThh: ММ: SS.mmmmmmmZ
Пример: 2013-04-24T11: 11: 50.2829708Z
Edit, позвольте мне уточнить по фактической проблеме, которую я имею:
Свойство Z возвращает смещение часового пояса в секундах. Мне нужно смещение, возвращаемое, поскольку дата (‘c’) возвращает его.
Пример:
+01: 00 вместо 3600
Есть ли встроенная функция для этого в PHP?
Вы ищете 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"
Чтобы напечатать дату в 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 используется этот формат, он может вам и не понадобиться.