Używam Cakepph4 i API Xero. Nie mogę znaleźć kodu do konwersji daty zwróconej jako '/Date(1617667200000+0000)/' z API Xero. Jest to znacznik czasu z pierwszymi 10 cyframi np. To wierzę. Próbowałem również używać przykładów JSON, ale nie dostać się nigdzie w tym Xero Docs.

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

Konwersja wyników JSON do daty

0
atown99 16 kwiecień 2021, 03:11

1 odpowiedź

Najlepsza odpowiedź

Wyrażenie regularne wyciągnie to z łatwością:

$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

Zobacz https://3v4l.org/5JT5B

Edytuj - prostsza wersja, nie ma potrzeby regexa, jeśli format danych jest spójny

$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
1
Tangentially Perpendicular 16 kwiecień 2021, 03:35