не могу извлечь дату '/ Дата (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

Преобразование результатов json в дату

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
Другие вопросы по тегам