【问题标题】:Format date to iso.8601将日期格式化为 iso.8601
【发布时间】:2011-12-20 17:59:24
【问题描述】:

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

【问题讨论】:

  • 你确定日期是罪魁祸首吗?
  • 是的 - 我可以提交没有日期的帖子(只是将该字段空白)并且效果很好。只有当我试图通过日期时才会出现问题。
  • 具体: $content['date_created_gmt'] = date( 'c', strtotime($thetime) );问题可能是我也没有将其更改为 GMT 吗?
  • 根据我发现有同样问题的人数,我相信这会对其他人有所帮助。 wordpress.org/support/topic/please-helpgetting-date 解决了我的格式问题 - 我找不到其他任何地方。

标签: php wordpress date xml-rpc strtotime


【解决方案1】:

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

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

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

【讨论】:

  • 如果我不转换为 srtotime 日期是正确的 - 之后它们只是数字所以我假设它们是正确的。这也可能是 WP 的问题,因为我看到其他人在以后的帖子中遇到问题。在那里挖得更深一点
  • @EdCharkow 糟糕,php 已经包含时区。重写了答案。最终输出 (ISO8601) 应该是完全可读的,格式为 YYYY-MM-DDThh:mm:ss[+-]hh:mm。例如,当前时间是2011-12-20T20:04:46Z,或2011-12-20T21:04:46+01:00(使用 CET 时区规范)。
【解决方案2】:

根据XMLRPC specifications,在这个标签<dateTime.iso8601>中定义了日期时间 并具有这种格式 19980717T14:08:55。所以完整的标签看起来像这样
<dateTime.iso8601>20090322T23:43:03</dateTime.iso8601>

这是使用phpxmlrpc_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>

【讨论】:

    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2013-05-22
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多