Сохранить дату и время в UTC, просмотреть / запросить в часовом поясе пользователя в Rails? - PullRequest
1 голос
/ 26 января 2011

Что является стандартом для сохранения времени в одной зоне и просмотра его в другой?У меня это есть в моем environment.rb:

config.time_zone = 'UTC'

Но я хочу отрендерить его и выполнить запросы типа «все записи, созданные сегодня» в их часовом поясе, где beginning_of_day возвращает начало дня вих часовой пояс, а не UTC.Рельсы уже обрабатывают преобразование в фоновом режиме?

Вот проблема:

@now = Time.now
 => Wed Jan 26 09:50:04 -0600 2011 
User.count(:conditions => ["created_at > ?", @now])
  SQL (1.3ms)   SELECT count(*) AS count_all FROM `users` WHERE (created_at > '2011-01-26 09:50:04') 
 => 1 
@now = Time.now.utc
 => Wed Jan 26 15:50:10 UTC 2011 
User.count(:conditions => ["created_at > ?", @now])
  SQL (1.2ms)   SELECT count(*) AS count_all FROM `users` WHERE (created_at > '2011-01-26 15:50:10') 
 => 0 

1 Ответ

6 голосов
/ 26 января 2011

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

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