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

时间:2011-07-03 00:47:35

标签: ruby-on-rails ruby ruby-on-rails-3

所以我正在尝试这样做:

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

问题是created_at是一个日期时间,因此找不到任何匹配项。有什么建议吗?

6 个答案:

答案 0 :(得分:21)

你可能想要这样的东西:

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

答案 1 :(得分:13)

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

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

Extract date (yyyy/mm/dd) from a timestamp in PostgreSQL

答案 2 :(得分:5)

您需要与午夜到下一个范围进行比较。 此外,这是制作自己的类方法的好选择 提高灵活性。

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)

答案 3 :(得分:1)

如果在应用程序配置中指定了时区,它也可以是TimeWithZone。要将Date发送到TimeWithZone,您必须执行Date.today.to_time.in_time_zone。

答案 4 :(得分:0)

Rails 5.1 及更高版本中,您可以使用all_day实例方法,如下所示:

SELECT [Days_Since],[Rate] FROM [Change]

答案 5 :(得分:-4)

您是否尝试过使用#to_datetime,哪些Rails会添加到DateTime类?

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

实际上,惊讶的AR并没有为你处理这个问题。