如何使用Ruby on Rails找到今天,昨天等的记录?

时间:2010-08-25 22:31:30

标签: ruby-on-rails datetime activerecord date

我想查找所有记录,比如Posts,今天用Ruby on Rails创建,然后是昨天创建的所有帖子,等等......我该怎么做?

谢谢,

凯文

3 个答案:

答案 0 :(得分:16)

试试这个:

#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 :(得分: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)

答案 2 :(得分:0)

要使用范围进行查询,我更喜欢以下内容:

yesterday = Date.yesterday
start = yesterday.beginning_of_day
#Fri, 27 Nov 2020 00:00:00 UTC +00:00
end = yesterday.end_of_day
# Fri, 27 Nov 2020 23:59:59 UTC +00:00 - the value here is one second before midnight
# meaning we should use an inclusive range using two dots:
range = start..end

Post.where(created_at: range)