Je mis le fuseau horaire local dans Rails avec cette fonction JavaScript dans ma mise en page:Comment puis-je convertir un temps pour les utilisateurs fuseau horaire dans Rails
<script type="text/javascript" charset="utf-8">
<% unless session[:timezone_offset] %>
$.ajax({
url: '/main/timezone',
type: 'GET',
data: { offset: (new Date()).getTimezoneOffset() }
});
<% end %>
</script>
où cela est la fonction de réception:
# GET /main/timezone AJAX
#----------------------------------------------------------------------------
def timezone
#
# (new Date()).getTimezoneOffset() in JavaScript returns (UTC - localtime) in
# minutes, while ActiveSupport::TimeZone expects (localtime - UTC) in seconds.
#
if params[:offset]
session[:timezone_offset] = params[:offset].to_i * -60
ActiveSupport::TimeZone[session[:timezone_offset]]
end
render :nothing => true
end
Et puis j'ai le décalage dans ma session, donc je faire quelque chose comme cela pour montrer un temps:
<%= (@product.created_at + session[:timezone_offset]).strftime("%m/%d/%Y %I:%M%p") + " #{ActiveSupport::TimeZone[session[:timezone_offset]]}" %>
Est-tout de cela vraiment nécessaire dans Rails 3? Je pense que les deux premiers blocs de code peuvent être, mais le troisième semble un peu excessif ...
Seul le problème avec ceci est alors il enregistre dans ce fuseau horaire ainsi maintenant ma base de données aura le temps économisé dans différents fuseaux horaires. Peut-être que ce n'est pas mauvais si ça garde une trace du fuseau horaire ... Qu'en penses-tu? Est-ce que c'est comme ça que ça se fait normalement? Merci! – Tony
Il ne devrait pas enregistrer avec les fuseaux horaires - dans des circonstances normales. Par exemple, les migrations pour Postgres créent des colonnes de temps sans informations de zone. Idem pour Sqlite. Donc, il ne devrait y avoir aucune information sur le fuseau horaire stocké. J'ai une idée géniale pour faire une liste d'exemples simples et travailler avec tzones serait l'un d'entre eux. Mais pas maintenant car je dois travailler pour vivre :-) –
Quand je le relis j'ai l'impression que je n'étais pas assez clair - les temps sont toujours sauvegardés en UTC quels que soient les paramètres de Time.zone. –