2010-08-25 34 views

回答

15

试试这个:

#Today 
Posts.find(:all, conditions: { :created_at => Date.today...Date.today + 1 }) 
#Yesterday 
Posts.find(:all, conditions: { :created_at => Date.today - 1...Date.today }) 

还是这个(最好,在我看来):

#Today 
Posts.find(:all, conditions: ["DATE(created_at) = ?", Date.today]) 
#Yesterday 
Posts.find(:all, conditions: ["DATE(created_at) = ?", Date.today - 1]) 
1

按规定我储存所有的日期在UTC时区的服务器上,让UI处理任何时区转换。 为了获得正确的查询类型,我必须首先将输入日期按照UTC特定的时间范围按摩。

require 'date' 

class Post < ActiveRecord::Base 

    def self.created(a_date) 
    return Post.where(created_at: to_timerange(a_date)) 
    end 

    private 

    def self.to_timerange(a_date) 
    raise ArgumentError, "expected 'a_date' to be a Date" unless a_date.is_a? Date 
    dts = Time.new(a_date.year, a_date.month, a_date.day, 0, 0, 0).utc 
    dte = dts + (24 * 60 * 60) - 1 
    return (dts...dte) 
    end 

end 

这就允许你调用

# today 
posts = Post.created(Date.today) 
# yesterday 
posts = Post.created(Date.today - 1)