2013-05-28 11 views
9

Desidero inserire una data in una raccolta. Io uso la classe MongoDate per creare l'oggetto data:Inserimento di una data in mongodb

$today = new MongoDate(strtotime(date('Y-m-d 00:00:00'))); 

Il problema è che una volta che è nella mia collezione la data è 2 ore prima.

Ad esempio, $today qui deve essere 2013-05-28 00:00:00 ma una volta nel database è 2013-05-27 22:00:00.

Non riesco a risolvere questo problema aggiungendo 2 ore manualmente al timestamp perché utilizzo la data nelle query.

L'ora locale del server in cui è in esecuzione Mongo è impostata sull'ora corretta del mio paese.

+0

cosa sbagliato con risparmio di una data come 'nuovo oggetto Date'? includerà i dati relativi al fuso orario – Sagish

+1

Tutte le date in MongoDB sono UTC, perché non riesci a rendere nota la tua fascia oraria delle applicazioni? – Sammaye

+0

Uso le date come intervallo nelle mie query con operatori $ gte e $ lte. Questo è il motivo per cui voglio utilizzare il formato MongoDate che consente il confronto ed è facilmente leggibile (i timestamp non lo sono). Devo trovare un modo per inserire una data indipendentemente dal fuso orario e il cambio di ora legale/estiva perché ciò causerà problemi. –

risposta

11
$dt = new DateTime(date('Y-m-d'), new DateTimeZone('UTC')); 
$ts = $dt->getTimestamp(); 
$today = new MongoDate($ts); 

Questo funziona.

+4

non funziona 2015-08-18T00: 00: 00.000Z –

2

Rimuovere vecchio documento e inserire

 $bill = array( 
       "_id" => 1, 
       "name" => "A", 
       "lastModified" => new MongoDate() 
      ); 

     $collection->insert($bill); 
9

che funziona nella nuova versione di PHP di MongoDB:

new MongoDB\BSON\UTCDateTime((new DateTime($today))->getTimestamp()*1000) 
Problemi correlati