@ snitko - ваш ответ работал отлично для меня долгое время. Однако, как указал @Giovanni, он не учитывает переход на летнее время в некоторых сценариях, поскольку он вытягивает первый доступный часовой пояс с учетом минутного смещения. Я нашел простой рабочий ответ, который объясняет летнее время.
Отправляйтесь сюда - http://site.pageloom.com/automatic-timezone-detection-with-javascript, это детектор часовых поясов javascript. Вы просто копируете код javascript, связанный с веб-сайта (или прямо здесь ), в один из файлов javascript вашего приложения (application.js работает нормально). Это позволяет вам извлекать часовой пояс через объект с именем jstz
.
Тогда в application.html.erb у меня есть
<script type="text/javascript">
var timezone = jstz.determine();
document.cookie = 'time_zone='+timezone.name()+';';
</script>
А в application_controller.rb у меня есть
before_filter :set_timezone
private
def set_timezone
Time.zone = cookies["time_zone"]
end
И это все, что вам нужно! Часовой пояс установлен правильно для вашего приложения Rails.
РЕДАКТИРОВАТЬ: Возможно, вам нужно поместить код настройки cookie javascript после тега <\body>
в application.html.erb из-за различий в способе загрузки файлов javascript и порядка их размещения.