我做:
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'")
......但这似乎有点不对劲。有更聪明的方法吗?
答案 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_now
,3.days.since(Date.yesterday)
等