2010-07-21 19 views
13

Estoy convirtiendo fechas y horas en marcas de tiempo utilizando PHP antes de que se inserten en mi base de datos MySQL.PHP strtotime() ¿funciona mal por 1 hora?

Mi problema es que cuando uso la función strtotime de PHP, la marca de tiempo de salida es de -1 hora detrás de mi tiempo real.

Por ejemplo, teniendo en cuenta la fecha de hoy: 21/07/2010. Cuando uso el código php como:

<?php 
$my_timestamp = strtotime("07/21/2010"); 
echo $my_timestamp; 
?> 

La marca de tiempo devuelta es el equivalente de GMT MENOS 1 hora. es decir, vuelvo: 20 de julio de 2010, 23:00:00 GMT en lugar de 21 de julio de 2010, 00:00:00 GMT.

Vivo en el Reino Unido, así que mi zona horaria es GMT. He declarado mi zona horaria en el script usando date_default_timezone_set ('Europe/London') y también me he asegurado de que el archivo php.ini esté configurado en 'Europa/Londres'.

¿Tiene esto algo que ver con el horario de verano, tal vez? ¿Cómo puedo solucionar el problema sin agregar 1 hora a todas mis fechas?

+0

Si solo necesita agregar 1 hora a las fechas, agregue 3600 a la marca de tiempo (3600 segundos = 1 hora) – NullUserException

+13

Su zona horaria no es GMT, Reino Unido está en verano ahora que es GMT +1 – nos

+2

@nos ¿Por qué no? agregue eso como una respuesta, creo que es la correcta. –

Respuesta

26

La hora de Europa/Londres no es la hora GMT durante el horario de verano. Debe configurarlo en UTC.

date_default_timezone_set('UTC');

date_default_timezone_set('GMT'); podría funcionar, pero, como Kenneth señala en un comentario más abajo, que está en desuso.

+3

PRECAUCIÓN: GMT se ha depreciado en versiones más recientes de PHP y, aunque aún se admite temporalmente, se recomienda encarecidamente que UTC se usa en su lugar. – Kenneth

+1

@Kenneth Agregó una nota. ¡Gracias! – Yahel

-9

Antes de PHP 5.3 del strtotime tenían problemas de tiempo de cálculo si se añade o se deduce meses y los días, etc., que se fijó por lo que ahora puede decir específicamente cómo quiere que se calcula, si está por debajo de PHP 5.3 Yo recomendaría hacer la fecha de cálculo en mysql o actualice su versión de PHP.

+1

¿Seguro que no entiende las funciones de fecha y hora de PHP que están "molestas"? –

+0

";?> Pruebe eso. –

+1

@ Android Noob No estoy seguro de que quiera que funcione. Un mes no es una unidad de medida fija. podrían ser 28, 29, 30 o 31 días dependiendo del mes, a diferencia de las otras interpretaciones strtotime() que sí funcionan (+1 día, +1 semana), que siempre son una cantidad fija de tiempo, independientemente de cuándo th ey ocurren. (Dicho esto, no soy uno de tus votantes abajo). – Yahel

1

La zona horaria de Londres se expresa en el horario de verano británico durante el verano. Una vez dicho esto, es una buena práctica almacenar la hora en UTC y presentar el tiempo al usuario final en UTC o en SU ​​hora local.

También es probable que sea conveniente asegurarse de que la hora de su sistema sea UTC.