问题描述
我正在使用 cakePHP4 和 Xero API。我找不到转换从 Xero API 返回为 '/Date(1617667200000+0000)/'
的日期的代码。它是前 10 位数字的时间戳,例如 $rr=gmdate("Y-m-d",1617667200);
可以工作,但我不能像这样对字符串进行硬编码,也不能只找到前 10 位数字。我相信这是一个 StringUtil 。我也尝试使用 JSON 日期示例,但没有得到任何地方,包括 Xero 文档。
$rr=StringUtil::convertStringToDate($date);//no
$rr=gmdate("Y-m-d",$date); //no
Converting json results to a date
解决方法
正则表达式可以轻松提取:
$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