2016-01-20 14 views
7

Ho trascorso 3 giorni cercando di risolvere questo problema senza successo. Sto usando la libreria PHP di MongoDB e sto provando a convertire un timestamp in una data valida usando l'esempio in PHP Docs, ma restituisce sempre 1970-01-17.Data e ora in php e mongodb

Il codice è:

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

    $datetime = $utcdatetime->toDateTime(); 

    var_dump($datetime); 

risposta

11

I documentation afferma che il costruttore prende in un parametro intero che rappresenta il timestamp in millisecondi, si fornisce un timestamp in secondi quindi il valido risultato data.

Moltiplicare il valore per 1000 per ottenere il timestamp in millisecondi restituire così un oggetto datetime valida convertito:

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

$datetime = $utcdatetime->toDateTime(); 

var_dump($datetime); 
+0

Ciao chridam, grazie per la risposta, ma ora sto ottenendo 1969/12/08 05:14:47 come data. Qualche idea del perché? –

+2

Sembra che tu stia utilizzando una versione di PHP a 32 bit che non può gestire numeri grandi come un timestamp in millisecondi. Non c'è soluzione per questo a parte l'esecuzione di PHP a 64 bit, o non l'utilizzo di questo oggetto Mongo affatto poiché apparentemente vuoi un DateTime. '$ foo = new DateTime(); $ Foo-> setTimestamp (1453939200); var_dump ($ pippo); ' – Sammitch

+0

Sarebbe d'accordo con @Sammitch qui su questo – chridam

0

a chiunque cerchi questo: Bisogna prima di convertire il valore in un timestamp e dopo che sarai in grado di convertirlo in un ISODate valido. Ad esempio:

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

UTCDateTime richiede un timestamp basato su millisecondi come parametro, strtotime restituisce un timestamp di secondo livello. http://php.net/manual/en/class.mongodb-bson-utcdatetime.php – Weboide