0

我正在使用 cakephp4 和 Xero API。我找不到转换'/Date(1617667200000+0000)/'从 Xero API 返回的日期的代码。它是一个带有前 10 位数字的时间戳,例如$rr=gmdate("Y-m-d", 1617667200);可以工作,但我不能像这样对字符串进行硬编码,或者只找到前 10 位数字。我相信这是一个 StringUtil 。我也尝试使用 JSON 日期示例,但没有得到任何地方,包括 Xero 文档。

 $rr=StringUtil::convertStringToDate($date);//no
 $rr=gmdate("Y-m-d", $date);  //no

将json结果转换为日期

4

1 回答 1

1

正则表达式将轻松提取它:

$text = '/Date(1617667200000+0000)/';
preg_match('#^/Date\((\d{10})#', $text, $matches);  // Use # as delimiter.
                                                    // From start match /Date(
                                                    // match and capture next 10 digits

$dt = new DateTime('@'.$matches[1]);                // Create PHP DateTime object from unix timestamp

echo $dt->format('Y-m-d H:i:s');    // 2021-04-06 00:00:00

https://3v4l.org/5jT5B

编辑 - 更简单的版本,如果数据格式一致,则不需要正则表达式

$text = '/Date(1617667200000+0000)/';
$timeStamp = substr($text, 6,10);
$dt = new DateTime('@'.$timeStamp);                // Create PHP DateTime object from unix timestamp

echo $dt->format('Y-m-d H:i:s');    // 2021-04-06 00:00:00
于 2021-04-16T01:05:46.007 回答