我试图在 Rails 3.2 的日期间隔上做一个 each .. 像这样:
(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)
不起作用..似乎是第一个月(例如:今天是八月,它将在七月返回)并且不会重复其他月份..
有没有办法做到这一点?
谢谢
我试图在 Rails 3.2 的日期间隔上做一个 each .. 像这样:
(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)
不起作用..似乎是第一个月(例如:今天是八月,它将在七月返回)并且不会重复其他月份..
有没有办法做到这一点?
谢谢
您使用 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
这个怎么样:
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