簡體   English   中英

將日期與 Rails3 中的 Datetime Created_at 進行比較

[英]Comparing a Date to the Datetime Created_at in rails3

所以我正在嘗試做這樣的事情:

today = Date.today - 1
todaysReport = Report.where(:created_at => today).find_by_user_id(user.id)

問題是 created_at 是一個日期時間,所以它不會找到任何匹配項..有什么建議嗎?

你可能想要這樣的東西:

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])

在 postgres 中,您可以將時間戳轉換為日期。 例如:

Report.where("created_at::date =?", Date.today - 1)

從 PostgreSQL 中的時間戳中提取日期 (yyyy/mm/dd)

您需要與從一個午夜到下一個午夜的范圍進行比較。 此外,這是制作您自己的 class 方法以獲得更高靈活性的良好候選者。

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)

Rails 5.1及更高版本中,您可以像這樣使用all_day實例方法:

today = Date.today - 1
todaysReport = Report.where(created_at: today.all_day).find_by_user_id(user.id)

如果在應用程序配置中指定時區,它也可以是 TimeWithZone。 要獲得 TimeWithZone 的日期,您必須像 Date.today.to_time.in_time_zone 一樣。

您是否嘗試過使用 Rails 添加到DateTime類的#to_datetime

Report.where(:created_at => today.to_datetime).find_by_user_id(user.id)

實際上很驚訝 AR 並沒有為你處理這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM