1

Rails 3.2..で Date 間隔で 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)うまくいきません..最初の月を取得するようです(例:今日は8月で、7月に戻ります)、他の月を繰り返しません..

それを行う方法はありますか?

ありがとう

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 に答える