2012-08-30 32 views
12

¿Cómo en PHP obtengo el formato de marca de tiempo regular de una fecha MongoDB?Imprimir una fecha MongoDB de PHP

Supongamos que tengo:

$my_date; 
print_r($my_date); 

La salida print_r es:

MongoDate Object ([sec] => 1346300336 [usec] => 593000) 

Pero hacer:

echo $my_date; 

Salidas:

0.59300000 1346300336 

Incluso trataron:

echo (string)$my_date 

misma cosa.

Respuesta

28

$my_date->sec es la marca de tiempo unix, use la función date() para mostrarla en el formato requerido.

echo date('Y-m-d H:i:s', $my_date->sec); 
+2

No estoy seguro de quién fue la decisión en 10Gen, pero es confuso. No debería tener que llamar a la propiedad 'sec'. Oh, bien. – Justin

+2

esa persona tiene un control aquí en StackOverflow: http://stackoverflow.com/users/4243/kristina –

2

le falta el microsegundo.

Para mostrar (mongo -> php)

$fecha = date(preg_replace('`(?<!\\\\)u`', $my_date->usec, 'Y-M-d H:i:s.u'), $my_date->sec); 
//MongoDate ISODate("2013-05-28T15:27:24.735Z") 
//Php Date 2013-May-28 10:27:24.735000 

Para enviar a mongo (php -> mongo)

$fecha_mongo = new MongoDate(strtotime($fecha)); 
//Fail function, the short way but, 70000 isn't equal to 700000. 
//$fecha_mongo->usec = (int)$fecha_micro->format("u"); 
preg_match("/\.(.*)/", $fecha, $uSec); 
$fecha_mongo->usec = (int)(count($uSec)==2?$uSec[1]:0); 

//Php Date 2013-May-28 10:27:24.735000 
//MongoDate ISODate("2013-05-28T15:27:24.735Z") 

Buenos días!

Mario T.

3

Sólo una rápida actualización, quiere decir que tiene un método MongoDate toDateTime ya que la versión 1.6 de la extensión PECL. Ahora puede hacer

$mongoDate->toDateTime()->format(...)