Ruby on Rails按日期时间范围查询(最后24,48等...小时)

时间:2010-01-28 23:01:26

标签: ruby-on-rails datetime range

我正在尝试构建一个查询,该查询将根据列'last_login_at'搜索最近的条目。这是一个带时区的日期时间字段(即Time.zone.now) 当我执行

User.find(:all, :conditions => ["last_login_at < ?", 24.hours.ago])

我一无所获。

或者我可以将今天定义为Time.zone.today,将昨天定义为Time.zone.today - 1.day 并运行

User.find(:all, :conditions => ["last_login_at between ? and ?", today, yesterday])

它仍然返回0结果。我知道有些条目属于这一类。

2 个答案:

答案 0 :(得分:19)

老问题,但这是更新的语法:

User.where(last_login_at: 3.days.ago..DateTime.now)

答案 1 :(得分:11)

确保您在数据库中记录的时区和您的rails应用程序输出的时区是相同的。这有时会导致问题。否则尝试这个命名范围:

 class User < ActiveRecord::Base
   named_scope :last_loggedin_before, lambda { |time_ago| { :conditions => ['last_login_at   < ?', time_ago] } }
   named_scope :last_loggedin_within, lambda { |time_ago| { :conditions => ['last_login_at   > ?', time_ago] } }
 end

允许你这样做:

 User.last_loggedin_before 24.hours.ago

 User.last_loggedin_within 24.hours.ago