Область ActiveRecord, чтобы найти записи, созданные сегодня? - PullRequest
1 голос
/ 01 декабря 2010

Это должно быть легко сделать, но я думаю, что реализация часового пояса Rail отбрасывает мою работу ...

Как я могу создать область в Rails 3 (и ruby ​​1.9.2) для запроса записей, созданных сегодня?

В настоящее время я делаю это:

  scope :today, lambda { 
    where("created_at >= ? and created_at <= ?", 
           Date.today.beginning_of_day, Date.today.end_of_day)
  }  

И, похоже, он не работает должным образом. Я хочу, чтобы «сегодня» представляло 24-часовой период с 12:00 до 23:59 для местного часового пояса пользователя. Нужно ли конвертировать дату в UTC или что-то еще?

Ответы [ 3 ]

3 голосов
/ 01 декабря 2010

Вам нужно будет учесть часовой пояс пользователя.То есть начало дня и конец дня в часовом поясе пользователя.Для этого сначала проанализируйте текущее время в часовом поясе пользователя.Вы можете установить для зоны часовой пояс пользователя и выполнить расчет, или вы можете анализировать время напрямую, используя вариацию следующего кода.

timezone = current_user.timezone # Mountain Time (US & Canada)
users_current_time = ActiveSupport::TimeZone[timezone].parse(Time.now.to_s)

users_current_time.beginning_of_day и users_current_time.end_of_day должны генерировать правильный диапазон времениприложение, которое вы конвертируете в UTC и сгенерируете запрос, если UTC является часовым поясом вашего приложенияи использовать его в объеме. Этот Railscast дает честное представление о том, как это сделать.

1 голос
/ 01 декабря 2010

Если вы используете mysql, то я думаю, что вы просто хотите совпадать в тот день, а не время, верно? Иными словами, вы хотите, чтобы все записи с 1 декабря. 1 декабря между 12:00 и 23:59 подразумевается, если вы просто выполните поиск по дате.

 scope :today, lambda { 
    where("created_at = ?",
           Time.now.strftime("%Y-%d-%m")
  } 

Нечто подобное должно работать

0 голосов
/ 30 марта 2011

Как насчет этого?

  scope :today, lambda { 
    where("created_at >= ? and created_at <= ?", 
           Date.today.beginning_of_day.utc, Date.today.end_of_day.utc)
  }  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...