我尝试使用Rails 3.2在日期间隔中执行每个操作。就像这样:
(1.months.ago.to_date..5.months.from_now.to_date).step(1.month).each do |date|
puts date.strftime('%m/%Y')
end
但是,step(1.month)
不起作用..似乎是第一个月(例如:今天是八月,它将返回jully)并且不会迭代其他几个月..
有办法吗?
由于
答案 0 :(得分:2)
你使用Date作为你的迭代基础,并且1.month将(在幕后)翻译成我相信的秒。
当您添加到Date对象时,它以天为单位,因此:
Date.today + 1将是明天
因此,在您的示例中,您尝试步骤2592000天。
你可能想要的更像是:
(1.months.ago.to_date..5.months.from_now.to_date).step(30).each { |date| puts date.strftime('%m/%Y') }
如果你正在寻找足够智能的迭代器,以便知道当你“踩踏”时,每个月都会有多少天不会发生。你需要自己滚动它。
您可以使用>>智能地迭代数月。运营商,所以:
date = Date.today
while date < 5.months.from_now.to_date do
puts date.strftime('%m/%Y')
date = date>>1
end
答案 1 :(得分:0)
怎么样:
current_date, end_date = Date.today, 5.monthes.from_now.to_date
while current_date <= end_date
puts current_date
current_date = current_date.next_month
end