Php 无法提取日期'/日期(1617667200000+;0000)/';
我使用的是cakephp4和XeroAPI。我找不到转换从Xero API返回为Php 无法提取日期'/日期(1617667200000+;0000)/';,php,xero,Php,Xero,我使用的是cakephp4和XeroAPI。我找不到转换从Xero API返回为'/date(1617667200000+0000)/'的日期的代码。它是前10位数字的时间戳,例如$rr=gmdate(“Y-m-d”,1617667200)可以工作,但我不能像这样硬编码字符串,或者只找到前10位。我相信这是一个好消息。我也尝试过使用JSON日期示例,但没有得到任何结果,包括Xero文档 $rr=StringUtil::convertStringToDate($date);//no $rr=g
'/date(1617667200000+0000)/'
的日期的代码。它是前10位数字的时间戳,例如$rr=gmdate(“Y-m-d”,1617667200)
可以工作,但我不能像这样硬编码字符串,或者只找到前10位。我相信这是一个好消息。我也尝试过使用JSON日期示例,但没有得到任何结果,包括Xero文档
$rr=StringUtil::convertStringToDate($date);//no
$rr=gmdate("Y-m-d", $date); //no
正则表达式可以轻松地提取:
$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
看
编辑-更简单的版本,如果数据格式一致,则不需要正则表达式
$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
在我看来,它似乎是以毫秒为单位生成的,所以时间戳
1617667200000
应该除以1000,或者只需将最后3个零切掉,以秒为单位(在PHP中使用)。检查Xero API的文档,了解他们使用的格式。不,我尝试了这个,因为它不是时间戳,因为有太多的digitsgreat解决方案!但是,在cakephp中,由于datetime对象不存在,因此该代码无法正常工作,因此必须有一个解决方案,这样就没有什么大不了的了,debug(date('Y-m-d',$matches[1]);伟大的solutionDateTime存在于自5.2以来的每一个PHP版本中。如果您使用的是一个没有它的版本,那么您应该作为一个紧急事项进行升级。