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

Pat*_*ick 9 php date date-formatting

我查看了以下问题/回答: 如何在php中获得"yyyy-MM-ddTHH:mm:ss.fffZ"的格式? 响应包括指向Microsoft文档的链接以格式化日期,但这些在PHP中不起作用.

最佳答案表明

date('Y-m-dTH:i:s.uZ') //for the current time

这输出 2013-03-22EDT12:56:35.000000-1440016

背景

我正在使用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的第一个问题,请让我知道我是怎么走的

hek*_*mgl 5

Z代表时区UTC,在ISO-8601中定义,这是您想要的输出格式,扩展了毫秒部分.

在输出时间之前,您需要将本地时间转移到UTC:

$dt = new DateTime();
$dt->setTimeZone(new DateTimeZone('UTC'));
Run Code Online (Sandbox Code Playgroud)

那么你可以使用以下格式字符串:

echo $d->format('Y-m-d\TH-i-s.\0\0\0\Z');
Run Code Online (Sandbox Code Playgroud)

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

  • 以下内容有助于为API生成可接受的格式.1.`` $ dt new DateTime()``.2.`` $ dt-> format(DateTime :: ISO8601)``.输出``2014-07-08T09:18:01 + 1000`` - 注意与UTC相关的小时偏移中缺少的冒号.``date('c')``包括冒号.这不是我原来问题的答案,但它确实解决了我的问题. (3认同)