PHP date()返回格式yyyy-mm-ddThh:mm:ss.uZ

时间:2014-07-07 07:45:12

标签: php date date-formatting

我已查看以下问题/回复: 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的第一个问题,请让我知道我是怎么走的

1 个答案:

答案 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');

请注意,我已将毫秒部分归零并以格式模式转义特殊字符TZ