Проблемы с часовым поясом Rails - PullRequest
2 голосов
/ 06 февраля 2012

В течение некоторого времени я бился головой о часовые пояса в Rails. Вот вопрос:

Я хочу, чтобы пользователи могли вводить в поле time_select местное время (например, 9:30 утра). Исходя из выбранного часового пояса пользователя, он должен быть сохранен в базе данных как UTC (например, 9:30 AM EST сохраняется как 14:30)

Тогда для правильного отображения нужно только Time.zone.

Однако, похоже, что time_select создает хэш многопараметрических значений присваивания, который предполагает, что время, введенное пользователем, указано в UTC. Независимо от того, что я пытаюсь, я не могу привести это к местному времени пользователя. Например:

ruby-1.9.2-p290 :016 > Time.use_zone("Eastern Time (US & Canada)") do
ruby-1.9.2-p290 :017 >     a.attributes = {"starttime(1i)"=>"2000", "starttime(2i)"=>"1", "starttime(3i)"=>"1", "starttime(4i)"=>"09", "starttime(5i)"=>"30"}
ruby-1.9.2-p290 :018?>   end
 => {"starttime(1i)"=>"2000", "starttime(2i)"=>"1", "starttime(3i)"=>"1", "starttime(4i)"=>"09", "starttime(5i)"=>"30"} 
ruby-1.9.2-p290 :019 > a.starttime
 => 2000-01-01 09:30:00 UTC

Я видел рекомендации по использованию config.time_zone, но я хочу, чтобы это работало для пользователей в нескольких часовых поясах, поэтому настройка конфигурации для всего сайта не выглядит правильным решением.

Как сохранить введенное пользователем значение в базе данных как UTC?

Спасибо!

Ответы [ 2 ]

1 голос
/ 13 апреля 2013

Следующий эпизод Railscasts отлично подходит для объяснения того, как это сделать, если вы профессиональный участник:

http://railscasts.com/episodes/106-time-zones-revised

Он в основном использует тот же подход, что и подход Бена В., но использует фильтр вокруг вместо фильтра до. Вполне возможно, что Time.zone является потокобезопасным, так что это может оказаться ненужным, но я бы все равно это сделал.

1 голос
/ 06 февраля 2012

Взгляните на http://archives.ryandaigle.com/articles/2008/1/25/what-s-new-in-edge-rails-easier-timezones

Охватывает использование фильтров для установки часовых поясов для пользователей. Вы должны иметь возможность работать с выходными данными существующего представления, чтобы установить свойство в профиле пользователя (которое затем можно загрузить в фильтр).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...