MongoDB возвращает странный формат даты при запросе от PHP - PullRequest
0 голосов
/ 02 мая 2020

У меня есть коллекция MongoDB, документы которой содержат поле ISODate. Это значение было сохранено с помощью PHP.
Однако при получении данных из этой коллекции я получаю дату в странном формате, который не могу ни прочитать, ни преобразовать с помощью PHP. Если я сделаю var_dump, я получу это:

array(1) { ["$date"]=> array(1) { ["$numberLong"]=> string(13) "1588356428662" } }

Хотя это может выглядеть как стандартный массив, я не могу получить доступ к значениям (ни с номерами индексов, ни ключами). Я думаю, что поле $ numberLong может быть числом миллисекунд с начала эпохи или что-то в этом роде. Однако, поскольку я не могу получить доступ к значению, я все равно не могу попытаться преобразовать его.

Эта проблема уже задавалась в этой теме , которая была закрыта как дубликат. Тем не менее, пользователь не получил ответ, потому что рекомендуемый ответ не имеет ничего общего с тем, что он действительно спрашивал.

Я искал целое число rnet и только что обнаружил, что нить без ответов. В руководствах PHP нет ничего. Есть идеи?

1 Ответ

0 голосов
/ 02 мая 2020

Возможно, это не лучший способ решить эту проблему, но следующий код работал для меня:

function parseDate($datefromMongo){
    ob_start(); //In order to redirect the output of var_dump to variable $str
    var_dump($dateFromMongo); 
    $str = ob_get_clean();  

    $pieces = explode("string", $str); //To get only the string
    $pieces = explode('"', $pieces[1]); //To remove quote marks
    $millis = intval($pieces[1]); //Casting from string to integer

    //$millis is the number of milliseconds from the epoch.
    /*Function date only accepts a precission of 10 digits, and $millis has the 
    unix timestamp format (13 digits), so we divide by 1000*/

    return date("D, d F Y, G:i", ($millis/1000));

    //The string passed to date is the format expected on output, you can set which you want
}

Надеюсь, это может быть полезно для всех!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...