RFC 3339如何制作日期时间

Jah*_*ion 8 php datetime rfc3339 google-plus

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

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

所以通过php文档我发现:

DATE_RFC3339与DATE_ATOM相同(自PHP 5.1.3起)

这两种格式都是这样的:

"YMD\TH:我: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
Run Code Online (Sandbox Code Playgroud)

我一直都是FALSE回报.在我看来,问题出在最后一部分

.222Z

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

Gla*_*vić 7

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

$date = new DateTime('2014-01-22T10:36:00.222Z');
var_dump($date);
Run Code Online (Sandbox Code Playgroud)

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

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


Yev*_*yev 6

有一个技巧。一个特殊的常量DATE_RFC3339是为了提供帮助,但如果最后一个字符是“Z”,它就不起作用 - 这对于rfc3339 格式来说完全没问题。实际上 JSON 会指定这样的格式:

expected format YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ss+hh:mm
Run Code Online (Sandbox Code Playgroud)

但是使用这个DATE_RFC3339你可能会收到来自 PHP 的错误消息:

InvalidArgumentException: The timezone could not be found in the database
Run Code Online (Sandbox Code Playgroud)

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

带日期时间

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

含碳:

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