我正在尝试使用 PHP 访问 Apple News "Create Article" API,但出现以下错误:
{"errors":[{"code":"INVALID_DATE_FORMAT"}]}
文档要求:"ISO 8601格式的当前日期"
所以,我得到的日期和格式是这样的:
$date = date(DateTime::ISO8601);
输出以下内容:
2016-04-26T07:04:53-0700
但我仍然收到错误。有人知道为什么吗?
查看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",表示祖鲁语(又名 UTC),因此可能值得将日期和时间转换为 UTC,如下所示:
$date = (new DateTime)->setTimezone(new DateTimeZone('UTC'))->format(DateTime::ATOM);
如果您确实需要在末尾使用"Z"(祖鲁语),则可以执行以下操作:
$date = (new DateTime)->setTimezone(new DateTimeZone('UTC'))->format('Y-m-dTH:i:sZ');
旁注:要加载您自己的日期/时间(而不是现在使用),您可以将代码更改为:
$date = (new DateTime($yourDateTimeString))->setTimezone(new DateTimeZone('UTC'))->format('Y-m-dTH:i:sZ');
例如
$date = (new DateTime('2016-01-01 00:00:00 +0400'))->setTimezone(new DateTimeZone('UTC'))->format('Y-m-dTH:i:sZ');
请当心!如果要创建 DateTime 对象,请确保它知道您的原始时区。否则,转换为 UTC 将无济于事,Apple 的 API 会将您的时间作为 UTC,而不是您的本地时区。作为一般经验法则,请始终将日期存储为 UTC,然后在查看时转换回用户的本地时区。
使用gmdate("Y-m-dTH:i:sZ");
或urlencode(substr(date("c"), 0, 19)."Z";
快速回答:
date('c', $timestamp);
还要检查:您是否以字符串形式提供日期,例如:
(在您的 ANF 文件中)
{
....
"dateCreated": "2020-09-08T12:41:00+00:00",
....
}
有关更多示例,请查看元数据规范。苹果将正确处理(并尊重)时区。
可以通过标准使用日期函数来完成
echo date('Y-m-dTH:i:sO',time());
详细信息,其中"O"的最后一部分属于时区,例如"-0700"。