@snitko - mi si risponde ha lavorato molto per me per un lungo periodo di tempo. Tuttavia, come ha sottolineato @Giovanni, in alcuni scenari non tiene conto dell'ora legale, in quanto mette a disposizione il primo fuso orario dato l'offset dei minuti. Ho trovato una risposta semplice e funzionante che tiene conto dell'ora legale.
Testa qui - , è un rilevatore di fuso orario javascript. Basta copiare il codice javascript collegato dal sito Web (o a destra here) in uno dei file javascript della tua app (application.js funziona correttamente). Ti consente di recuperare il fuso orario tramite un oggetto denominato jstz
.
Poi, nel application.html.erb ho
<script type="text/javascript">
var timezone = jstz.determine();
document.cookie = 'time_zone='+timezone.name()+';';
</script>
E in application_controller.rb, ho
before_filter :set_timezone
private
def set_timezone
Time.zone = cookies["time_zone"]
end
E questo è tutto ciò che serve! Il fuso orario è impostato correttamente per l'app Rails.
MODIFICA: È possibile che sia necessario inserire il codice di impostazione del cookie javascript dopo il tag <\body>
in application.html.erb a causa del diverso modo e dell'ordine i file javascript sono caricati.
Potrebbe anche essere necessario per rimuovere tale >>> if (! ($. biscotto ('fuso orario'))) <<< condizioni, così come i visitatori del sito possono viaggio e c'è bisogno di aggiornare il loro valore di fuso orario. – yek
Un piccolo problema: il 'TimeZone [-min.minutes]' restituisce il primo fuso orario disponibile con l'offset 'min.minutes'. Ad esempio, per Tokyo restituisce Irkutsk. Quindi questo metodo funzionerebbe se non fosse necessario visualizzare il nome o il codice del fuso orario. – arkadiy
@arkadiy ha ragione, ma questo non è solo un problema _piccolo_ perché si possono ottenere fusi orari che non osservano l'ora legale (DST). In questo caso il risultato è un momento sbagliato. Inoltre 'new Date(). GetTimezoneOffset()' restituisce l'offset corrente compreso l'ora legale, ma la selezione 'ActiveSupport :: TimeZone []' prevede l'offset del fuso orario standard, quindi è necessario aggiornare la funzione javascript [come questa] (http://bit.ly/timezone_js). Puoi vedere [questo thread] (https://github.com/potomak/tomatoes/issues/8#issuecomment-2167461) sul problema se vuoi saperne di più. –