2016-01-20 16 views
7

Spędziłem 3 dni próbując rozwiązać ten problem bez powodzenia. Używam biblioteki PHP MongoDB i próbuję przekonwertować znacznik czasu w poprawnej dacie na przykładzie w PHP Docs, ale zawsze powraca 1970-01-17.Datownik do tej pory w php i mongodb

Kod jest:

$utcdatetime = new MongoDB\BSON\UTCDateTime(1453939200); 

    $datetime = $utcdatetime->toDateTime(); 

    var_dump($datetime); 

Odpowiedz

11

W documentation stwierdza, że ​​konstruktor pobiera parametr całkowita reprezentująca znacznik czasu w milisekundach, jesteś dostarczanie znacznik czasu w sekundach stąd nieważne data wynikowych.

Pomnóż wartość przez 1000, aby uzyskać znacznik czasu w milisekundach zatem powrócić ważny obiekt datetime konwertowane:

$timestamp = 1453939200 * 1000; 
$utcdatetime = new MongoDB\BSON\UTCDateTime($timestamp); 

$datetime = $utcdatetime->toDateTime(); 

var_dump($datetime); 
+0

Cześć Chridam, dziękuję za odpowiedź, ale teraz dostaję 1969-12-08 05:14:47 jako datę. Każdy pomysł, dlaczego? –

+2

Wygląda na to, że używasz 32-bitowej wersji PHP, która nie obsługuje liczb tak dużych jak znacznik czasu w milisekundach. Nie ma żadnego obejścia tego problemu, oprócz uruchamiania 64-bitowego PHP, lub nie używania tego obiektu Mongo, ponieważ najwyraźniej chcesz DateTime. '$ foo = new DateTime(); $ foo-> setTimestamp (1453939200); var_dump ($ foo); ' – Sammitch

+0

Zgodziłbym się z @Sammitch tutaj na tym – chridam

0

każdemu, kto szuka to: Musisz najpierw przekonwertować wartość w datownik, a potem będziesz w stanie przekonwertować go w ważnym ISODate. Np .:

$utcdatetime = new MongoDB\BSON\UTCDateTime(strtotime($date)); 
    $date2 = new MongoDB\BSON\Timestamp(1, date($utcdatetime)); 
+1

UTCDateTime przyjmuje znacznik czasu oparty na milisekundach jako parametr, strtotime zwraca drugi znacznik czasu. http://php.net/manual/en/class.mongodb-bson-utcdatetime.php – Weboide

Powiązane problemy