Переполнение стека в формате даты в Apple News API

Я пытаюсь получить доступ к API Новостей Apple «Создать статью» через PHP и получаю следующую ошибку:

{"errors":[{"code":"INVALID_DATE_FORMAT"}]}

Документация запрашивает: «Текущая дата в формате ISO 8601»

Итак, я получаю дату и форматирование так:

$date = date(DateTime::ISO8601);

Что выводит это:

2016-04-26T07:04:53-0700

Но я все еще получаю ошибку. Кто-нибудь знает почему?

1

Решение

Глядя на пример ответов на Apple Api ссылки (https://developer.apple.com/library/ios/documentation/General/Conceptual/News_API_Ref/CreateArticle.html#//apple_ref/doc/uid/TP40015409-CH14-SW1), похоже, формат даты выглядит следующим образом:

2015-03-05T02:57:59Z

Отметьте «Z» в конце, что означает «зулу» (a.k.a UTC), поэтому, возможно, стоит преобразовать дату и время в UTC следующим образом:

$date = (new DateTime)->setTimezone(new DateTimeZone('UTC'))->format(DateTime::ATOM);

если ты определенно Требуется Z (Zulu) на конце, вы можете сделать следующее:

$date = (new DateTime)->setTimezone(new DateTimeZone('UTC'))->format('Y-m-d\TH:i:s\Z');

Примечание: чтобы загрузить свою собственную дату / время (вместо использования сейчас), вы можете изменить код так:

$date = (new DateTime($yourDateTimeString))->setTimezone(new DateTimeZone('UTC'))->format('Y-m-d\TH:i:s\Z');

например

$date = (new DateTime('2016-01-01 00:00:00 +0400'))->setTimezone(new DateTimeZone('UTC'))->format('Y-m-d\TH:i:s\Z');

Пожалуйста, будьте осторожны! Если вы создаете объект DateTime, убедитесь, что он знает ваш исходный часовой пояс. В противном случае преобразование в UTC ничего не изменит, и Apple Api займет ваше время в формате UTC, а не в вашем местном часовом поясе. Как общее правило, всегда сохраняйте даты в формате UTC, а затем при просмотре конвертируйте обратно в местный часовой пояс пользователя.

3

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

использование gmdate("Y-m-d\TH:i:s\Z"); или же urlencode(substr(date("c"), 0, 19)."Z";

1

Быстрый ответ:

date('c', $timestamp);

Проверьте также: что вы предоставляете даты в виде строк, например:

(в вашем файле ANF)

{
....
"dateCreated": "2020-09-08T12:41:00+00:00",
....
}

Проверить Метаданные спецификации для большего количества примеров. Apple будет правильно обрабатывать (и уважать) часовые пояса.

0

Это можно сделать стандартным использованием функции даты

echo date('Y-m-d\TH:i:sO',time());

Детали, где последняя часть ‘O’ принадлежит часовому поясу, например, ‘-0700’.

0