PHP解析ISO格式的日期

11

我目前正在使用ConstantContact,它返回格式如下的更新字段的XML:

2013-02-13T08:35:34.195Z

我假设这是 date('c') 格式。如何解析此格式?strtotime没有返回正确的值。


1
你尝试过哪些方法?如果没有,请翻译以下内容:date('c', strtotime($date)); - AmazingDreams
@AmazingDreams 我不太清楚该尝试什么...我想从字符串表示中获取Unix时间戳。 - ewooycom
1个回答

32

您可能想要查看DateTime::createFromFormat()函数。

$datetime = DateTime::createFromFormat('Y-m-d\TH:i:s+', '2013-02-13T08:35:34.195Z');

问题在于你会失去毫秒。

格式字符串中的 + 符号只是告诉该函数忽略字符串的其余部分,而不是创建错误。

在 PHP7.2 中确认。如下面的评论所述,您可以使用 Y-m-d\TH:i:s.u\Z 来匹配与 toISOString 给出的 Js 字符串完全相同的字符串。


22
createFromFormat() 中使用 'DateTime::ISO8601''c' 而不是 'Y-m-d\TH:i:s+' 也可以起到同样的作用... - grim
4
我需要添加时区才能使其正常工作: DateTime::createFromFormat('Y-m-d\TH:i:s+', $isotime, new DateTimeZone('Etc/Zulu')); - Florian Fida
@grim 'c' 不起作用。 - Glutexo
实际上,C语言不符合JS的“ISO8601”标准,上述格式也不符合。我建议使用Y-m-d\TH:i:s.v\Z - dewwwald
2
我之前的评论附录。最好使用Y-m-d\TH:i:s.u\Z,它可以双向工作。 - dewwwald
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接