日期转换为ISO字符串的PHP方法。

5
我想要像 JavaScript 的 new Date().toISOString() 这样的日期。
输出为 2018-06-11T08:30:25.597Z
我尝试过:
(new \DateTime('now',new \DateTimeZone("UTC")))->format(\DateTime::ISO8601) // 2018-06-12T08:21:13+0000


$t = date('c', strtotime('2010-12-30 23:21:46')); //2010-12-30T23:21:46+01:00
$t2 = date(DATE_ISO8601, strtotime('2010-12-30 23:21:46')); //2010-12-30T23:21:46+01:00

$datetime = new \DateTime('2010-12-30 23:21:46');
$t3 = $datetime->format(\DateTime::ATOM); // 2010-12-30T23:21:46+01:00

我希望将ISO 8601日期和时间以UTC格式结合在一起(YYYY-MM-DDTHH:MM:S+时区偏移量|Z,即2018-04-18T11:02:05.261Z)

Javascript中可以使用以下代码实现此格式:

new Date().toISOString() //2018-06-12T08:24:49.321Z

为什么需要在末尾加上 Z+00:00 也是有效的 ISO8601 格式... - Glavić
尝试使用“Y-m-d\TH:i:s.v\Z”。 - Leo Cavalcante
你可以使用这个字符串 'Y-m-d\TH:i:s.v\Z',它对我有效。 2022-06-17T12:07:30.000Z - Abi Meii
1个回答

1
你的第一次尝试已经接近你所需要的,只需将\DateTime::ISO8601更改为\DateTime::ATOM即可。
来自PHP手册:

DateTime :: ISO8601   DATE_ISO8601

ISO-8601(示例:2005-08-15T15:52:01 +0000)

注意:此格式与ISO-8601不兼容,但出于向后兼容性的原因保留了该方式。请改用DateTime :: ATOM或DATE_ATOM以代替ISO-8601进行兼容性。


2
使用(new \DateTime('now',new \DateTimeZone("UTC")))->format(\DateTime::ATOM);可以得到2018-06-12T08:37:38+00:00,但我想要的是2018-06-11T08:30:25.597Z - monkeyUser
1
如果您需要将时区标识符设置为"Z",那么只能使用 str_replace("+00:00", "Z", $date);。PHP没有"Z"时区标识符格式。如果您需要秒的小数部分,则从 PHP 7.0 开始,您可以在任何 PHP 版本中使用\DateTime::RFC3339_EXTENDED或格式字符串:Y-m-d\TH:i:s.vP. - Łukasz Jakubek
1
$a = (new \DateTime('now',new \DateTimeZone("UTC")))->format(\DateTime::ATOM); $b = str_replace( "+00:00", "Z", $a); // 2018-06-12T08:53:02Z - monkeyUser
2
@monkeyUser:有一个更简单的解决方案:echo (new \DateTime('UTC'))->format('Y-m-d\TH:i:s\Z'); - Glavić

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