2010-09-25 24 views
9

En config/application.rb tengo "config.time_zone = 'UTC'" (sin comillas) en el archivo. Supongo que se trata de hacer la conversión de la hora del usuario, que se ingresa en la vista, a UTC, que se almacena en la base de datos. Mi pregunta es, ¿cómo convierto el valor UTC de la base de datos a la hora local del usuario para mostrar en la vista? He leído que los rieles se encargan de eso automáticamente, ¿cómo le digo que haga esto?Mostrar hora local a la vista

Tengo un campo de zona horaria en la fila de cada usuario en la base de datos, no estoy seguro de qué almacenar allí, también. Sé sobre el tiempo de rake: zonas: todo, ¡simplemente no sé cómo todo esto encaja en los rieles 3!

Gracias,

sk

Respuesta

15

Cuando se trabaja en un entorno multi-zona que es prudente tener zona horaria en UTC. Eso es perfectamente válido en su application.rb

rieles transformará automáticamente todos los tiempos a la zona horaria actual, que se puede configurar con

Time.zone = "some-zone" 

Lo que yo uso es una before_filter en donde ApplicationController establecer la zona horaria de acuerdo con el usuario actual. Entonces, todas las operaciones funcionan dentro de esta zona y no necesita pensar en ellas en sus controladores/modelos/vistas.

Supongamos que tiene algún modelo Foo con algún campo datetime. Luego de trabajar en la consola IRB:

Time.zone = "Prague" 
x = Foo.create(:it_will_happen_at => Time.zone.now) 
x.it_will_happen_at # => Sat, 25 Sep 2010 13:45:46 CEST +02:00 

Time.zone = "London" 
# it is needed to refresh the field after a time zone has changed. 
# In normal situation it'd not be needed, it's just for this console example 
x.reload 
x.it_will_happen_at # => Sat, 25 Sep 2010 12:44:46 BST +01:00 

Al echar un vistazo a la base de datos, se encuentra que el valor es Sáb 25 Sep 2010 11:45:46 GMT.

En cuanto al valor de la zona, prefiero los nombres de las ciudades, ya que funcionan sin problemas con el horario de verano (verano/invierno).

+0

Gracias, ¡su sugerencia funciona perfectamente! – dingalingchickenwiing

+0

me salvó el tiempo !! debería haber encontrado esto antes. –

Cuestiones relacionadas