【问题标题】:RFC 3339 how make a dateTime fromRFC 3339 如何从
【发布时间】:2014-02-18 10:09:17
【问题描述】:

我正在尝试格式化从 google plus Api 传递的日期,就像指南在 RFC 3339 格式中所说的那样:

PUBLISHED-> datetime-> 此活动最初发布的时间。格式化为 RFC 3339 时间戳。

所以通过 php 文档我发现:

DATE_RFC3339 与 DATE_ATOM 相同(自 PHP 5.1.3 起)

这两种格式都类似于:

"Y-m-d\TH:i:sP"

实际上 Google api 的输出是这样的:

2014-01-22T10:36:00.222Z

当我尝试启动如下命令时:

$date = DateTime::createFromFormat("Y-m-d\TH:i:sP", $activity['published']); //$activity['published'] contain the  date

我总是以FALSE 作为回报。 在我看来,问题出在最后一部分

.222Z

任何建议在通过一些基本方法削减之前都会受到赞赏......

【问题讨论】:

  • 或者使用标准的date()方法:date( DATE_RFC3339, $activity['published'] );

标签: php datetime google-plus rfc3339


【解决方案1】:

您不需要将DateTime::createFromFormat() 用于标准输入。只需使用:

$date = new DateTime('2014-01-22T10:36:00.222Z');
var_dump($date);

但是如果你仍然坚持使用createFromFormat(),那么使用正确的格式,用微秒:

$date = DateTime::createFromFormat('Y-m-d\TH:i:s.uP', '2014-01-22T10:36:00.222Z');
var_dump($date);

【讨论】:

    【解决方案2】:

    有个窍门。一个特殊的常量DATE_RFC3339 可以提供帮助,但如果最后一个字符是“Z”,它就不起作用了——这对于rfc3339 format 来说非常好。实际上 JSON 会像这样指定格式:

    expected format YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ss+hh:mm
    

    但是使用这个DATE_RFC3339 你可以从 PHP 收到错误消息:

    InvalidArgumentException: The timezone could not be found in the database
    

    这就是为什么我们需要手动指定格式:

    有日期时间

    $date = DateTime::createFromFormat ( 'Y-m-d\TH:i:s.u\Z' ,$time);
    

    含碳:

    \Carbon\Carbon::createFromFormat('Y-m-d\TH:i:s.u\Z',$time);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多