Tengo aplicación Rails3 con el usuario de modelo y de campo expires_at creado de esta manera:¿Cómo guardar las fechas en la zona horaria local a db con rails3?
t.column :expires_at, :timestamp
En mi base de datos (PostgreSQL) que tiene tipo:
timestamp without timezone
El problema es cuando llamo:
@user.expires_at = Time.now
@user.save
se guarda en la base de datos con la zona horaria UTC (mi hora local es UTC + 1:00, Varsovia) pero no quiero eso. Solo quiero tener tiempo con mi zona horaria local guardada en la base de datos (2011-03-30 01: 29: 01.766709, no 2011-03-29 23: 29: 01.766709)
¿Se puede lograr esto usando rails3?
¡Cuidado! Si tienes usuarios en más de una zona horaria, esto se convertirá en un desastre rápido. Prefiero mantener todos mis tiempos como UTC en la base de datos, y solo convertirlos a no UTC para mostrarlos en el lado del cliente (puede convertir una hora de UTC a la zona horaria configurada en el sistema operativo de un usuario con un poco de JavaScript) . ¡Buena suerte! –
¿qué ocurre con las consultas a la base de datos cuando recibo información del usuario? ¿ActiveRecord lo conversa con UTC automáticamente? –
Esa es una buena pregunta, pero lo dudo: debería conocer la zona horaria del usuario para poder realizar la conversión correcta. Si desea almacenar las fechas proporcionadas por el usuario como UTC, probablemente tendrá que convertirlas en el lado del cliente (urgh). He usado [date.js] (http://www.datejs.com/) para mis conversiones del lado del cliente, pero solo he hecho la visualización - Nunca he aceptado las fechas como entrada ... –