2010-08-25 49 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)