进入日期间隔

时间:2012-08-22 23:08:50

标签: ruby ruby-on-rails-3 ruby-on-rails-3.2

我尝试使用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)并且不会迭代其他几个月..

有办法吗?

由于

2 个答案:

答案 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