我正在使用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>