Pregunta

Para aquellos de nosotros que utilizan el estándar de alojamiento compartido de los paquetes, como GoDaddy o Soluciones de Red, ¿cómo manejar las conversiones de fecha y hora cuando su servidor de alojamiento web (PHP) y el servidor MySQL se encuentran en diferentes zonas horarias?

Además, ¿alguien tiene algunos consejos sobre mejores prácticas para determinar la zona horaria de un visitante a su sitio y la manipulación de una variable de fecha y hora apropiadamente?

¿Fue útil?

Solución

A partir de PHP 5.1.0 puede utilizar date_default_timezone_set() función para establecer la zona horaria por defecto utilizado por todas las funciones de fecha y hora en una secuencia de comandos.

Para MySql (citado de Servidor MySQL De Soporte De Zona Horaria página)

Antes de MySQL 4.1.3, el servidor opera sólo en la zona horaria del sistema establecido en el inicio.Empezando con MySQL 4.1.3, el servidor mantiene varios ajustes de zona horaria, algunos de los cuales pueden ser modificados en tiempo de ejecución.

De interés es por la configuración de la conexión de las zonas de tiempo, que se puede utilizar en el principio de los scripts

SET timezone = 'Europe/London';

Como para la detección de la configuración de la zona horaria del cliente, usted podría utilizar un poco de JavaScript para obtener y guardar esa información en una cookie, y utilizarlo en posteriores lecturas de página, para calcular la zona horaria adecuada.

//Returns the offset (time difference) between Greenwich Mean Time (GMT) 
//and local time of Date object, in minutes.
var offset = new Date().getTimezoneOffset(); 
document.cookie = 'timezoneOffset=' + escape(offset);

O usted podría ofrecer a los usuarios la opción para establecer su tiempo de las mismas zonas.

Otros consejos

Tienda de todo como UTC.Usted puede hacer las conversiones en el nivel del cliente, o en el lado del servidor utilizando la configuración del cliente.

php - fecha

mysql - utc-timestamp

VOLVER a la respuesta de Željko Živković, zona horaria descriptores como 'Europe/madrid' sólo funciona si el mySQL admin ha añadido, en la zona de las tablas del sistema, y los mantiene actualizados.

De lo contrario, usted está limitado a numérico compensaciones como '-4:00'.Afortunadamente el php date('P') formato lo proporciona (como de 5.1.3)

Así por ejemplo, en una aplicación de configuración de archivo que podría tener

define('TZ', 'US/Pacific');
....
if (defined('TZ') && function_exists('date_default_timezone_set')) {
    date_default_timezone_set(TZ);
    $mdb2->exec("SET SESSION time_zone = " . $mdb2->quote(date('P')));
}

Esto significa que PHP y mySQL de acuerdo sobre lo que el ajuste de zona horaria para su uso.

Use siempre la marca de tiempo para el almacenamiento de los valores de tiempo de.La columna se almacena como UNIX_TIME (epoch) sino que implícitamente se convierte en el actual time_zone desplazamiento cuando por escrito, y cuando la lectura.

Si desea visualizar veces por los usuarios en otras zonas horarias, entonces en vez de un mundial define(), configurar su zona horaria en la anterior.Valores de marca de tiempo se convierte automáticamente en mySQL en el momento de su aplicación se ve el conjunto de resultados (que a veces puede ser un problema, si usted necesita saber en realidad el original en la zona horaria de el evento también se necesita para estar en otra columna)

y tan lejos como, "¿por qué no acaba de guardar todos los tiempos como int s", que hace que pierda la capacidad de comparar y validar fechas, y los medios que siempre tenemos que convertir a la fecha de la representación en el nivel de aplicación (y es difícil en los ojos cuando usted está buscando en los datos directamente - rápido, lo que sucedió en 1254369600?)

Puedo guardar todos mis fechas como un bigint debido a haber tenido problemas con el tipo de fecha y hora antes.Puedo guardar el resultado de la época() de PHP función en ella, ahora cuentan en la misma zona horaria :)

En php establecer la zona horaria en el php.archivo ini: ini_set("date.timezone", "America/Los_Angeles");

o, en particular, la página que usted puede hacer como: date_default_timezone_set("America/Los_Angeles");

En mysql se puede hacer como: SET GLOBAL time_zone = 'America/Los_Angeles';

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top