2010-07-21 12 views
14

Estoy obteniendo feeds xml y rss y poniendo los datos en una base de datos. Me he encontrado con dos diferentes formatos de fecha hasta el momento ...convertir cualquier cadena de fecha en marca de tiempo sin zona horaria

Wed, 21 Jul 2010 00:28:50 GMT 

Y

2010-07-20T17:33:19Z 

Estoy seguro de que habrá más. Mi base de datos postgresql para la fecha es marca de tiempo sin zona horaria. ¿Hay una función existente en php o hay un procedimiento para convertir las cadenas de fecha a timestamp sin zona horaria (Y-m-d H: i: s)?

Respuesta

18

Uso date con strtotime:

$date = date('Y-m-d H:i:s', strtotime('Wed, 21 Jul 2010 00:28:50 GMT')); 
echo $date; 

Resultado:

2010-07-21 05:28:50 

.

$date = date('Y-m-d H:i:s', strtotime('2010-07-20T17:33:19Z')); 
echo $date; 

Resultado:

2010-07-20 22:33:19 
5

marcas de tiempo son considerados como UTC.

$dt = new DateTime('Wed, 21 Jul 2010 00:28:50 GMT'); 
echo $dt->format('U'); // 1279672130 

es la misma marca de tiempo como

$dt = new DateTime('Wed, 21 Jul 2010 02:28:50 CEST'); 
echo $dt->format('U'); // 1279672130 

Tenga en cuenta que la opción de formato requiere U PHP5.3 sin embargo. Cuando el suministro de un identificador de zona horaria en la cadena de fecha, el objeto DateTime reconoce la zona horaria, por lo que cuando se llama a la siguiente en la instancia GMT DateTime

echo $dt->format('Y-m-d H:i:s'); 

regresará 2010-07-21 00:28:50. Sin embargo, puede cambiar la zona horaria de un objeto DateTime con su método setTimezone().

$dt = new DateTime('Wed, 21 Jul 2010 02:28:50 GMT+2'); 
$dt->setTimezone(new DateTimeZone('UTC')); 
echo $dt->format('Y-m-d H:i:s'); // 2010-07-21 00:28:50 

Pero si solo necesita el sello de tiempo, no es necesario.

11

No necesita convertirlo en absoluto. PostgreSQL debe convertir automáticamente:

postgres=# create table test_tz (f1 timestamp without time zone); 
CREATE TABLE 
postgres=# insert into test_tz (f1) values ('Wed, 21 Jul 2010 00:28:50 GMT'); 
INSERT 0 1 
postgres=# insert into test_tz (f1) values ('2010-07-20T17:33:19Z'); 
INSERT 0 1 
postgres=# select f1 from test_tz; 
     f1   
--------------------- 
2010-07-21 00:28:50 
2010-07-20 17:33:19 
+3

detalles acerca de los formatos de fecha/hora Postgres-reconocidos [aquí] (http://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME -ENTRADA). –

Cuestiones relacionadas