2011-09-02 9 views
5

Dada la siguiente fecha de cadena: Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time)fecha strtotime resultado raro

en php si hago un strtotime en lo anterior, y luego volver a convertirlo en una cadena de fecha, parece que ganar una hora.

echo $str_date," Vs ",date("c",strtotime($str_date)); 

Produce:

Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time) Vs 2011-09-02T22:00:00+01:00

Soy consciente de que tiene que ver con el horario de verano, pero ¿cómo se puede compensar esto?

Respuesta

1

Me doy cuenta de que esto tiene que ver con el horario de verano, pero ¿cómo se puede compensar esto?

Al no usar date() y strtotime(); se prefiere la clase DateTime.

$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100'; 
$datetime = new DateTime($str_date); 
echo $datetime->format('c'); // 2011-09-02T21:00:00+01:00 

o en el estilo de procedimiento

$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100'; 
echo date_format(date_create($str_date), 'c'); // 2011-09-02T21:00:00+01:00 

Aparte: si desea seguir utilizando date()/strtotime() entonces, como las otras respuestas y sus propias observaciones muestran, es necesario tener cuidado con las zonas horarias en uso en la cadena de fecha y su secuencia de comandos.

+0

Esto produce los resultados esperados, gracias. –

3

Creo que malentendido,
no hay ahorro de luz del día, en este caso,
PERO GMT, ganas un hora, porque de esa

en mi zona horaria (GMT + 8)

php -r "echo date('r', strtotime('Fri Sep 02 2011 21:00:00 GMT+0100'));" 
Sat, 03 Sep 2011 04:00:00 +0800 

el que gano 7 horas, debido a GMT+8 - GMT+1 = 7

1

¿Qué versión de PHP que utiliza? ¿Cuál es su configuración de date.timezone? Lo digo porque no puede reproducir la salida ejecuta PHP 5.3.6 en Mac OS X:

$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time)'; 
echo $str_date," Vs ",date("c",strtotime($str_date)); 
// Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time) Vs 1970-01-01T01:00:00+01:00 

Esto es correcto porque Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time) no es una cadena de fecha/hora válida.

$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100'; 
echo $str_date," Vs ",date("c",strtotime($str_date)); 
// Fri Sep 02 2011 21:00:00 GMT+0100 Vs 2011-09-02T22:00:00+02:00 

Esto es correcto porque estoy en GMT + 2.

+0

yup, '(GMT Daylight Time)' es superfluo – ajreal

0

parece que strtotime() renders su tiempo como el formato SOAP: YY "-" MM "-" DD "T" HH ":" II ":" SS frac tzcorrection?

resultado es:

"2008-07-01T22:35:17.02", "2008-07-01T22:35:17.03+08:00" 

Usted puede tratar de dar formato a la cadena de tiempo que algún otro formato de hora. Mire en http://www.php.net/manual/en/datetime.formats.compound.php

Cuestiones relacionadas