我正在尝试格式化从谷歌加Api传递的日期,就像指南在RFC 3339格式中说的那样:
以下列方式公布> 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
答案 0 :(得分:7)
您无需使用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);
答案 1 :(得分: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
这就是为什么我们需要手动指定格式:
使用DateTime
$date = DateTime::createFromFormat ( 'Y-m-d\TH:i:s.u\Z' ,$time);
使用碳:
\Carbon\Carbon::createFromFormat('Y-m-d\TH:i:s.u\Z',$time);