Rails和created_at

时间:2010-10-15 16:48:20

标签: ruby-on-rails activerecord date

我做:

Order.find(:all, :conditions => "created_at>='#{DateTime.now.year}-#{month}-1' and created_at<='#{Date.new(DateTime.now.year, month.to_i, -1)}'")

除了不包括在该月的最后一天创建的所有内容之外,它工作正常。 Created_at可能包含:“2010-09-30 18:34:09”。这不低于或等于“2010-09-30”。我知道我可以将方法更改为:

Order.find(:all, :conditions => "created_at>='#{DateTime.now.year}-#{month}-1' and created_at<='#{Date.new(DateTime.now.year, month.to_i, -1)} 23:59:59'")

......但这似乎有点不对劲。有更聪明的方法吗?

3 个答案:

答案 0 :(得分:2)

或者你可以使用

< Date.today.next_month.beginning_of_month

让所有事情都比下个月少。

答案 1 :(得分:0)

这是正确的方法,恕我直言。作为2010-09-30 18:34:09的时间表示在概念上仅是对单个数字的人性友好显示。所以把它想象成与数字进行比较。因此,明确有关数字的最小值和最大值是有意义的。

答案 2 :(得分:0)

这可能无法解决您的问题,但您应该在此处使用Rails的Ruby扩展。您可以执行1.month.ago之类的操作,它将返回表示当前日期减去1个月的DateTime对象。

也可以定义您可能期望的其他方法。 4.days.from_now3.days.since(Date.yesterday)