Ruby on Rails query by datetime range ( last 24, 48, etc... hours )
datetime, range, ruby-on-rails
Solution
Ensure that the timezones you have recorded within the database and those your rails app is outputting are equal. This can sometimes cause an issue. Otherwise try this named scope:
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
allowing you to do:
User.last_loggedin_before 24.hours.ago
or
User.last_loggedin_within 24.hours.ago
Problem
I'm trying to build a query that will search for recent entries based on column 'last_login_at'. This is a datetime field with time zone (i.e. `Time.zone.now`) When I execute ``` User.find(:all, :conditions => ["last_login_at < ?", 24.hours.ago]) ``` I get nothing. Alternatively I can define today as `Time.zone.today` and yesterday as `Time.zone.today - 1.day` and run ``` User.find(:all, :conditions => ["last_login_at between ? and ?", today, yesterday]) ``` and it still returns 0 results. I know there are some entries that fall into this category.