我想获取从Rails种子到Rails种子的日期范围。红宝石/导轨的日期范围
当我尝试生成日期范围((Date.today - 10).. Date.today)发生异常。
异常消息:为范围
但在Rails的控制台一切都好坏值。
我认为ActiveSupport是合理的(我的调试器告诉我这一点)。
Ralls 3.1.3
发生了什么事?
我想获取从Rails种子到Rails种子的日期范围。红宝石/导轨的日期范围
当我尝试生成日期范围((Date.today - 10).. Date.today)发生异常。
异常消息:为范围
但在Rails的控制台一切都好坏值。
我认为ActiveSupport是合理的(我的调试器告诉我这一点)。
Ralls 3.1.3
发生了什么事?
你可以理解这是怎么回事由两个边分裂,并检查他们的阶级,像这样:
Date.today.class # => Date
(Date.today - 10).class # => Date
((Date.today - 10)..Date.today).each {|d| puts d.class} # => 10 Date works for me
您遇到的错误是这样的:
('a'..10) # => ArgumentError: bad value for range
你可以发布你的范围的2个边的类吗?
(Date.today - 10).class => ?
Date.today.class => ?
你是否覆盖了你的rails环境中的任何类?它在irb
中工作吗?
PS:当你在轨道是可以使用10.days.ago
但你需要使用to_date
因为它是一个ActiveSupport::TimeWithZone
边缘的类别是Date,真的。 – 2012-04-16 09:42:04
我相信你,但无论如何''((Date.today - 10).to_date..Date.today.to_date)' – ecoologic 2012-04-16 09:44:48
生态,谢谢!只是我的变量名称错误。 – 2012-04-16 10:35:21
begin
((Date.today - 10)..Date.today).each { |date| puts date }
rescue
$! # => #<NameError: uninitialized constant Date>
end
require 'date'
((Date.today - 10)..Date.today).each { |date| puts date }
# >> 2012-04-06
# >> 2012-04-07
# >> 2012-04-08
# >> 2012-04-09
# >> 2012-04-10
# >> 2012-04-11
# >> 2012-04-12
# >> 2012-04-13
# >> 2012-04-14
# >> 2012-04-15
# >> 2012-04-16
这可以做到!围绕日期范围逐步加入了一些边缘案例,但如果您使用Rails中的ActiveSupport,则可以优雅地处理这些问题。查看我的答案在http://stackoverflow.com/questions/19093487/ruby-create-range-of-dates/19094504#answer-19094504了解更多详情:D – captainpete 2013-11-01 00:48:41