2009-01-10 9 views
5

Mi servidor está en Dallas. Estoy en Nueva York ... y tanto PHP como MySQL tienen variables de configuración para configurar la zona horaria.¿Cuál es la mejor manera de administrar las fechas en PHP, MySQL, etc.?

¿Cómo hago que trabajen todos juntos? ¿Qué fechas debo almacenar en MySQL? ¿Cómo hago para que PHP se encargue de cambiar la fecha según las preferencias del usuario?

Tenga en cuenta: no creo que tenga PHP configurado explícitamente la fecha, siempre está usando "AHORA()" en las consultas ... sin embargo, preveo la necesidad de hacerlo. ¿Cómo se haría esto?

Espero que la experiencia de SO pueda ayudarme aquí.

Respuesta

0

Registre sus fechas en GMT (desplazamiento cero) y luego calcule el desplazamiento en función de la zona horaria local (EST es +6, por ejemplo, por lo que agregaría 6 horas al GMT).

Compruebe el Date docs para la función date_default_timezone_set().

Recuerde, al escribir en la base de datos, tendrá que cambiar las zonas horarias, almacenar la fecha y luego volver atrás. Del mismo modo, cuando recupera la fecha, no se olvide de agregar el desplazamiento de la zona horaria.

+0

Su respuesta no es lo suficientemente clara. Hay varios aspectos para la configuración: la zona horaria de PHP, la zona horaria de MySQL y la zona horaria de los servidores. ¿Estás diciendo que debo configurar la zona horaria de MySQL para que sea GMT? –

+0

Disculpa, pero sigo sin entender a qué te refieres aquí. Podría proporcionar un ejemplo, donde el usuario especifica su zona horaria y el servidor se encuentra en, digamos, Dallas. –

+0

Necesita usar la zona horaria de Dallas (suponiendo que el servidor esté configurado en esa zona horaria) para convertir a 0 GMT offset. Entonces, si un usuario especifica una NY como zona horaria, es fácil convertir la compensación de 0 GMT a EST. – null

16

Use Unix Time en todas partes. Está usando UTC así que es el mismo para cada zona horaria. Los métodos para las fechas generalmente se convierten y retroceden utilizando la información de la zona horaria que tienen, por lo que tendría un tiempo correcto.

Alternativamente, podría usar Tiempo Unix solo para transferir el tiempo de una computadora a otra (como desde la base de datos a su servidor con PHP o al cliente JavaScript). Hay funciones para convertir a ella y de ella en todos los idiomas. Para MySQL es:

UNIX_TIMESTAMP(date) 
FROM_UNIXTIME(unix_timestamp) 

De esa manera usted podría tener su tiempo con el formato adecuado en la base de datos y en los registros, pero todavía tienen hora local correcta en todas partes.

+0

No podría estar más de acuerdo. –

+1

¿Cómo implemento esto? NOW() en MySQL tiene en cuenta la zona horaria –

+0

UNIX_TIMESTAMP() ... no importa. El único problema es que me gusta utilizar DATETIME porque es más agradable de ver, no tiene el error 2038. –

0

El servidor mysql almacena las fechas en un formato independiente de zona horaria (UTC).
Pero antes de que almacene la fecha, se convertirá utilizando su zona horaria.

U puede cambiar la zona horaria por conexión MySQL * 1:

mysql_query('SET time_zone = "'.$timezone.'"'); 

También puede cambiar la zona horaria por la escritura.

date_default_timezone_set($timezone); 

Si se ajustan a la misma zona horaria "2009-01-10 13:30:00" significará lo mismo que tanto MySQL y PHP.

Pero tenga en cuenta que los 2 servidores tienen diferentes valores de reloj interno, por lo que si desea generar marcas de tiempo en función de la hora actual. Haz eso en mysql O php.

* 1) El soporte de zona horaria MySQL puede requerir una configuración adicional. check the manual

2

Prefiero usar las fechas y las horas en la forma nativa con respecto al entorno, es decir, las marcas de tiempo Unix en PHP y los campos DATE/TIME/DATETIME/TIMESTAMP en MySQL. Traduzco ambos valores a otro usando FROM_UNIXTIME() y UNIX_TIMESTAMP(). Prefiero esto en lugar de marcas de tiempo de Unix, porque las fechas/horas nativas son mucho más fáciles de leer.

Cuestiones relacionadas