не могу извлечь дату '/ Дата (1617667200000+0000)/'
Я использую 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
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
Изменить - более простая версия, нет необходимости в регулярном выражении, если формат данных согласован
$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