2009-06-16 14 views
6

Tengo una aplicación que utiliza Zend_Date para mostrar las fechas. Las instancias de Zend_Date se crean utilizando datos de fecha y hora de MySQL, la entrada del usuario y la fecha actual.Tratando con fechas y zonas horarias, con Zend_Date

Me gustaría que mis usuarios puedan especificar su zona horaria y que se muestren todas las fechas en su horario local.

Por el momento mi código funciona así:

$date = '2009-01-01 10:30:00'; 

$date = new Zend_Date($date, Zend_Date::ISO_8601); 

echo $date->get(Zend_Date::TIME_MEDIUM); //10:30:00 

$date->setTimezone('Australia/ACT'); 

echo $date->get(Zend_Date::TIME_MEDIUM); //21:30:00 

Esto funciona, pero requiere una llamada settimezone en cada fecha. ¿Hay una manera más fácil de administrar zonas horarias?

También he estado buscando usar SET time_zone con MySQL, para devolver datos ajustados de MySQL. Entonces solo necesitaría ajustar las fechas creadas dentro de los scripts PHP para las zonas horarias.

Me encantaría saber la mejor manera de manejar esto, si alguien tiene experiencia.

Gracias

Respuesta

7

creo que la creación de la zona horaria PHP debe establecer el valor predeterminado para todas las instancias Zend_Date posteriores. Por ejemplo:

date_default_timezone_set('Europe/Vienna'); 

Desde el Zend_Date section in the Zend Framework Reference Guide:

En PHP, podemos ajustar todas las funciones de fecha y hora relacionados con el trabajo para un usuario en particular mediante el establecimiento de una zona horaria por defecto de acuerdo con las expectativas del usuario. Al crear instancias de Zend_Date, su zona horaria se convertirá automáticamente en la zona horaria predeterminada actual.

+2

Gracias. Parece que la mejor manera es que configure UTC como valor predeterminado, trabaje con UTC datetime internamente y use setTimezone para producir horas locales específicas de zona horaria. –

1

Creo que podría hacer uso de Zend_Locale, leer algunos documentos al respecto, bastante seguro de que sería capaz de hacerlo funcionar. Por otro lado, si usas Zend_Cache y Zend_Locale/Zend_Date, eso mejorará bastante la velocidad. Hay ejemplos de uso en los documentos zend framework también.

Cuestiones relacionadas