Hay un par de maneras que usted puede hacer esto en función de cómo se configura la aplicación. Ninguno de los cuales es exclusivo del entorno de Heroku.
Si su aplicación permite que los usuarios se registren, es muy probable que tenga un modelo de usuario y es posible que esté utilizando la gema Devise para autenticación/registro. Añadir un campo a su base de datos (: time_zone) y almacenar la zona horaria de los usuarios en este campo cuando se inscriban.
>> rails generate migration add_time_zone_to_users time_zone:string
>> rake db:migrate
Carriles le da una forma time_zone_select mano de ayuda que le da una lista de selección con todas las zonas de tiempo en ella que puede mostrar a su usuario. Agréguelo al formulario de registro de usuario y permita que el usuario configure su zona horaria cuando se registre. http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/time_zone_select
En su Controlador de aplicaciones, puede hacer algo como esto;
before_filter :set_time_zone
def set_time_zone
#current user is a devise method see https://github.com/plataformatec/devise
Time.zone = current_user.time_zone if current_user
end
A continuación, cuando se muestra una fecha en su llamada aplicación .in_time_zone
en el instante de tiempo que muestra la hora en el huso horario usuarios.
<%= Time.now.in_time_zone %> or <%= @your_model.created_at.in_time_zone %>
Si no tiene autenticación de usuario, puede recurrir a javascript. Para ello se puede utilizar el Javascript nativo getTimezoneOffset()
en el objeto de fecha, o incluso utilizar mejor la siguiente jsTimezoneDetect plugin:
http://www.pageloom.com/automatic-timezone-detection-with-javascript
Por último se puede utilizar un híbrido de ambos y en primer lugar detectar su huso horario usando javascript y luego almacene este valor en una sesión/cookie de rieles y luego use un filtro_de_fuera para establecer el Time.zone como se indicó anteriormente pero basado en el valor de time_zone de la sesión previamente calculado en javascript.
He estado buscando por la web, y parece probable que voy a tener que hacer algo en el lado del cliente con JS y pasar de nuevo al servidor . Por favor avise. –