所以我想要做的事情,像這樣:一個日期到datetime Created_at在Rails3中比較
today = Date.today - 1
todaysReport = Report.where(:created_at => today).find_by_user_id(user.id)
的問題是created_at是一個日期,這樣就不會找到任何matches..Any建議?
所以我想要做的事情,像這樣:一個日期到datetime Created_at在Rails3中比較
today = Date.today - 1
todaysReport = Report.where(:created_at => today).find_by_user_id(user.id)
的問題是created_at是一個日期,這樣就不會找到任何matches..Any建議?
你可能想是這樣的:
yesterday = Time.now - 1.day
user = User.find(user_id)
todaysReport = user.reports.where(["created_at >= ? AND created_at <= ?", yesterday.beginning_of_day, yesterday.end_of_day])
您需要對比從一個午夜到另一個的範圍。 此外,這是一個很好的候選人,可以讓您自己的班級方法 獲得更高的靈活性。
class Report
# All reports created on the specified Date
def self.created_on(date)
where(['created_at >= ? AND created_at < ?', date, date + 1])
end
end
# Find all reports created yesterday by our user
Report.created_on(Date.today - 1).where(:user_id => user.id)
我喜歡這一點!我應該將beginning_of_day和end_of_day添加到日期變量中,但是對嗎? – Elliot
@Elliot:沒有必要。日期將被轉換爲日期時間,並將時間部分設置爲幕後的午夜。 –
如果在應用程序配置中指定時區,它也可以是TimeWithZone。要將日期轉換爲TimeWithZone,您必須像Date.today.to_time.in_time_zone一樣進行操作。
在postgres中,您可以將時間戳記作爲日期。例如:
Report.where("created_at::date = ?", Date.today - 1)
在Heroku Postgres的 – Elliot
'Date.today - 1'將評估爲* *昨天。刪除'-1'或將「今天」的三個實例更改爲「昨天」 –