将日期格式化为iso.8601


Format date to iso.8601

我正在使用wordpress XMLRPC在我的博客上发布一些未来的帖子,但是我遇到了一些日期格式的问题…基本上让我自己都混乱了:)

所以我已经设置了"未来"的发布日期。挺好的。

$thetime = date("Y-m-d H:i:s", strtotime("+ $number days", strtotime(date("Y-m-d H:i:s"))));

($thetime回显出我拍摄的日期-所以这里一切正常)

但是wp客户端需要ISO.8601格式的日期。所以我这样修改:

$content['date_created'] = date( 'c', strtotime($thetime) );

但是我从xml-rpc客户端得到一个响应,它是畸形的。

那么如何将$thetime改为iso呢?8601格式,因为我认为这是'c'做什么?我做错了什么吗?

首先,验证输出字符串并确保输出是您所期望的。这里可能有一个完全不相关的bug(例如忘记调试echo)。

一些实现可能要求日期是UTC时间。简单地用gmdate代替date,并在末尾添加Z:

$content['date_created'] = gmdate('Y-m-d''TG:i:s''Z', strtotime($thetime)) . 'Z';

根据XMLRPC规范,datetime在这个标记<dateTime.iso8601>中定义格式为19980717T14:08:55。完整的标签看起来像这样
<dateTime.iso8601>20090322T23:43:03</dateTime.iso8601>

这是使用php xmlrpc_encode_request()函数时常见的错误,该函数不自动转换日期。不如用xmlrpc_set_type()函数。

<?php
$params = date("Ymd'TH:i:s", time());
xmlrpc_set_type($params, 'datetime');
echo xmlrpc_encode($params);
?>
上面的示例将输出类似于:
<?xml version="1.0" encoding="utf-8"?>
<params>
<param>
 <value>
  <dateTime.iso8601>20090322T23:43:03</dateTime.iso8601>
 </value>
</param>
</params>