ActiveSupport имеет встроенные методы для отображения значений времени в любом часовом поясе.Обычно вы добавляете столбец time_zone
в модель пользователя и устанавливаете его в предпочтительную зону пользователя.
@user.update_attribute(:time_zone,'Eastern Time (US & Canada)')
Затем при отображении значения времени установите зону в зону пользователя.
Time.zone = @user.time_zone
Time.zone.now # shows current time according to @user.time_zone
Один из подходов состоит в том, чтобы установить это значение в ApplicationController
, чтобы оно выполнялось для каждого запроса:
class ApplicationController < ActionController::Base
before_filter :set_time_zone
def set_time_zone
Time.zone = current_user.time_zone if current_user
end
end
Примечание: см. API в ActiveSupport :: TimeWithZone