2012-08-22 109 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