我已查看以下问题/回复: How do I get the format of “yyyy-MM-ddTHH:mm:ss.fffZ” in php? 响应包括指向格式化日期的Microsoft文档的链接,但这些链接在PHP中不起作用。
最佳答案建议
date('Y-m-dTH:i:s.uZ') //for the current time
此输出
2013-03-22EDT12:56:35.000000-1440016
背景
我正在使用API,该API需要上述格式的时间戳。该API位于英国(GMT),我的服务器位于澳大利亚(AEST)。
API文档中给出的示例要求使用此格式的日期:
2011-07-15T16:10:45.555Z
我能得到的最接近的是日期('c')输出:
2014-07-03T16:41:59+10:00//Notice the Z is replaced with a time diff in hours
我相信'Z'指的是一个区域,但PHP文档中没有提到它。
不幸的是,当我发布这种格式时,API正在阅读时间并花费10个小时。我收到一个错误,说日期不能过去(因为它是根据墨尔本的当地时间进行检查,但是提前10小时查看)。
我尝试修剪时间戳以删除API接受的+1000,但记录显示为10小时前创建的。
我需要匹配所需的时间戳,但我找不到任何方法来复制上面的输出,在澳大利亚墨尔本的PHP中。非常感谢任何帮助。
关于SO的第一个问题,请让我知道我是怎么走的
答案 0 :(得分:5)
Z
代表时区UTC
,在ISO-8601中定义,这是您所需的输出格式,扩展了毫秒部分。
在输出时间之前,您需要将当地时间转移到UTC:
$dt = new DateTime();
$dt->setTimeZone(new DateTimeZone('UTC'));
然后您可以使用以下格式字符串:
echo $d->format('Y-m-d\TH-i-s.\0\0\0\Z');
请注意,我已将毫秒部分归零并以格式模式转义特殊字符T
和Z
。