2011-12-03 33 views
7

PHP date() & time() retorno hora incorrecta:PHP fecha equivocada/hora

Cuando date.timezone = "Europe/Riga" la hora devuelta por date() era 03-12-2011 08:57:12, pero el tiempo era 03-12-2011 01:57:12 sistema (zona horaria Europa/Riga - hora correcta en ese momento). Cuando cambié zona horaria a "Europa/Londres", el tiempo cambió a 03-12-2011 06:57:12 (tiempo real 02-12-2011 23:57:12)

Tiempo devuelto por date/hwclock --show era correcta (03-12-2011 01:57:12 con la zona horaria del sistema establecido como Riga)

SO: Debian 6.0

he comprobado la mayor parte de las preguntas relacionadas con problemas similares en SO/Google, pero todos ellos parecen tener zona horaria equivocada especificado.

Por lo que yo puedo decir que hay un problema entre php -> os. Por supuesto, como el desplazamiento de tiempo incorrecto es siempre constante, puedo restar la diferencia, pero no es una solución adecuada.

Cualquier idea será muy apreciada.

+1

¿Qué está utilizando para su 'date()' value? p.ej. 'date ('Ymd H: i: s')' –

+1

Sí - 'date ('Ymd H: i: s')' – relic

+0

¿Qué sucede si usa la clase 'DateTime' para determinar la fecha, junto con' DateTimeZone' ? Por ejemplo '$ d = new DateTime ('', new DateTimeZone ('Europe/Riga')); echo $ d-> format ('Y-m-d H: i: s'); ' –

Respuesta

3

El problema es similar a lo que he visto en uno de mis servidores. Parece que quiere bug in php 5.3.2-1. Intenta ejecutar el script php en el informe de errores y publica tus resultados.

+1

Parece que no era un error real. El periodista simplemente tenía otro código que restablecía la zona horaria predeterminada. Tan válido en el sentido de que deberías estar atento a eso. Beaware de configuración de código y .ini que puede tener impacto. – ficuscr

10

lectura manual de PHP parece que el comportamiento de date.timezone se ve afectada por la configuración de php.ini. Hay otra forma de configurar la zona horaria predeterminada en todas las funciones de fecha/hora y es date_default_timezone_set. Tratar de establecer con:

date_default_timezone_set('Europe/Riga'); 

en lugar de su date.timezone código.

+0

Gracias. Pero ya lo he intentado sin éxito. El hecho de que cuando cambié la zona horaria de Riga a Londres, la diferencia de tiempo fue de 2 horas sugiere que la selección de la zona horaria "funciona", pero el problema es con el valor de tiempo inicial. – relic

2

La zona horaria del sistema podría estar equivocado. Esto da como resultado un cambio en un tiempo dado por la función PHP date(), aunque tanto php date.timezone (en php.ini) como la hora del sistema del servidor son correctas.

-4

vez que PHP se basa en la escala de tiempo época que utiliza GMT y más tarde GMT. La mayoría de las personas ahora lo llaman tiempo de Unix. Debido a que PHP usa el tiempo Unix, no se usan las zonas horarias. Creo que restar las horas de la zona horaria en segundos es el método correcto para ajustar las diferencias.

+0

El tiempo Unix es un conteo simple desde un momento fijo en el tiempo; no se ve afectado por las zonas horarias. Además, PHP tiene un manejo bastante decente de la zona horaria; no hay absolutamente ninguna razón para omitirlo y escribir el suyo. –

-2

usted tiene que fijar date.timezone en php.ini y reinicie el servidor de http://php.net/manual/en/timezones.php

+0

Esto es exactamente lo que el OP significó cuando dijo 'date.timezone =" Europe/Riga "'. –

1

que tenía algún problema con la zona horaria también. Esto puede ser útil para alguien.

En mi caso, Chile Sumer Time CLST devolvió una compensación de timzeone incorrecta.

Actualizando el timezonedb funcionó para mí.

Ir a: https://pecl.php.net/package/timezonedb

Para Widnows descargar la última versión de DLL, copiar en el directorio "ext". Edita el php.ini y poner debajo de la línea:

extensión = php_timezonedb.dll

Para Linux Se puede utilizar:

instalación pecl timezonedb

y en poner php.ini:

extensión = php_timezonedb.so