使用 php 中的时区转换原子时间戳
Convert atom timestamp with timezone in php
我有一些 json 数据,其中包含原子格式的时间戳。
时间戳的一些例子:
2020-04-12T04:05:08.92949232Z
2020-03-24T22:59:13.447142853+01:00
我正在尝试用 'date("Y-m-d g:i:s",strtotime($atom)' 转换它们,但 +timezone 格式似乎有问题。
它适用于 $atom = "2020-04-12T04:05:08.92949232Z".
但是如果 $atom = "2020-03-24T22:59:13.447142853+01:00" 我得到 1970-01-01 12:00:00.
我试过 DateTime::createFromFormat,但就是无法正常工作。
这是否可以毫不费力地解析,或者我是否必须拍摄创建 json 文件的人?
如果句点后的数字超过 6 位,DateTime 会出现问题。
您必须将小数点后的数字限制为最多 6 位,然后表达式将被接受。
$strDate = '2020-03-24T22:59:13.447142853+01:00';
//reduce microseconds to a maximum of 6
$strDate = preg_replace_callback('~\.\d{7,}~',function($match){
return ltrim(sprintf('%0.6F',$match[0]),'0');
},$strDate);
$d = date_create($strDate);
var_dump($d);
//object(DateTime)#2 (3) { ["date"]=> string(26) "2020-03-24 22:59:13.447143" ["timezone_type"]=> int(1) ["timezone"]=> string(6) "+01:00" }
我有一些 json 数据,其中包含原子格式的时间戳。
时间戳的一些例子:
2020-04-12T04:05:08.92949232Z
2020-03-24T22:59:13.447142853+01:00
我正在尝试用 'date("Y-m-d g:i:s",strtotime($atom)' 转换它们,但 +timezone 格式似乎有问题。
它适用于 $atom = "2020-04-12T04:05:08.92949232Z".
但是如果 $atom = "2020-03-24T22:59:13.447142853+01:00" 我得到 1970-01-01 12:00:00.
我试过 DateTime::createFromFormat,但就是无法正常工作。 这是否可以毫不费力地解析,或者我是否必须拍摄创建 json 文件的人?
如果句点后的数字超过 6 位,DateTime 会出现问题。 您必须将小数点后的数字限制为最多 6 位,然后表达式将被接受。
$strDate = '2020-03-24T22:59:13.447142853+01:00';
//reduce microseconds to a maximum of 6
$strDate = preg_replace_callback('~\.\d{7,}~',function($match){
return ltrim(sprintf('%0.6F',$match[0]),'0');
},$strDate);
$d = date_create($strDate);
var_dump($d);
//object(DateTime)#2 (3) { ["date"]=> string(26) "2020-03-24 22:59:13.447143" ["timezone_type"]=> int(1) ["timezone"]=> string(6) "+01:00" }