将日期与rails3中的Datetime Created_at进行比较

Ell*_*iot 16 ruby ruby-on-rails ruby-on-rails-3

所以我正在尝试这样做:

today = Date.today - 1
todaysReport = Report.where(:created_at => today).find_by_user_id(user.id)
Run Code Online (Sandbox Code Playgroud)

问题是created_at是一个日期时间,因此它不会找到任何匹配项.任何建议?

Dex*_*Dex 22

你可能想要这样的东西:

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])
Run Code Online (Sandbox Code Playgroud)

  • @dex,@elliot ......我不知道这是否适用于postgres,但这适用于mysql..`user.report.where(["DATE(created_at)=?",Date.today - 1]) (3认同)

fbo*_*tti 14

在postgres中,您可以将时间戳转换为日期.例如:

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

从PostgreSQL中的时间戳中提取日期(yyyy/mm/dd)


Lar*_*eth 6

您需要与午夜到下一个范围进行比较.此外,这是制作自己的类方法以获得更高灵活性的良好候选者.

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)
Run Code Online (Sandbox Code Playgroud)