1

我试图在 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)不起作用..似乎是第一个月(例如:今天是八月,它将在七月返回)并且不会重复其他月份..

有没有办法做到这一点?

谢谢

4

2 回答 2

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
于 2012-08-22T23:35:43.773 回答
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
于 2014-10-14T12:04:36.820 回答