2012-08-22 63 views
1

我试图做一个每一个日期间隔使用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)不行..好像它拿到第一个月(例如:今天是八月,它将返回茱莉),并没有重复其他月份。

有没有办法做到这一点?

感谢

回答

2

您使用日期为您的迭代基地,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 
+0

感谢的人,它完美的作品! – caarlos0

+0

这帮了我很大的忙。我天真地认为在一个月内以几天为单位计算出步骤方法。谢谢! – kylekeesling

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