格式化日期为iso.8601

时间:2011-12-20 17:59:24

标签: php wordpress date xml-rpc strtotime

我正在使用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'的作用?我做错了吗?

2 个答案:

答案 0 :(得分:3)

首先,验证输出的字符串并确保输出符合您的预期。那里可能存在一个完全不相关的错误(例如忘记的调试echo)。

某些实现可能要求日期为UTC时间。只需使用gmdate代替date,最后添加Z

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

答案 1 :(得分:0)

根据XMLRPC specifications,此标记<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>