私は数十年前の過去数年間のすべての日と月をループし、各日付の月と日の名前を持つ必要があります。明らかにこれを達成できる一連のループがありますが、これを達成するための最も簡潔なルビー風の方法を知りたかったのです。過去X年にわたり数値的に+月と日をループする方法は?
基本的に私は、過去のX年間で日ごとに、このような出力を必要とするだろう:
2011年1月3日と2011年1月3日
クリーンなアプローチは何ですか?
私は数十年前の過去数年間のすべての日と月をループし、各日付の月と日の名前を持つ必要があります。明らかにこれを達成できる一連のループがありますが、これを達成するための最も簡潔なルビー風の方法を知りたかったのです。過去X年にわたり数値的に+月と日をループする方法は?
基本的に私は、過去のX年間で日ごとに、このような出力を必要とするだろう:
2011年1月3日と2011年1月3日
クリーンなアプローチは何ですか?
日付は範囲として機能することができるため、範囲を繰り返し処理するのはかなり簡単です。実際には、メソッド(here)に書かれているフォーマットされた文字列として出力するしか方法はありません。
from_date = Date.new(2011, 1, 1)
to_date = Date.new(2011, 1, 10)
(from_date..to_date).each { |d| puts d.strftime("%-d %B %Y and %-m/%-d/%Y") }
# => 1 January 2011 and 1/1/2011
# => 2 January 2011 and 1/2/2011
# => ...
# => 9 January 2011 and 1/9/2011
# => 10 January 2011 and 1/10/2011
(注:私は方法再度Windowsで%-d
ようパディングされていないパーセント形式でいくつかの不運を持っ思い出すが、上記の仕事としていない場合、あなたは彼らがパディングされていないという環境の中で、あなたが削除することができますしたいですダッシュし、あなた自身の回避策を採用してください。)
minとmaxがDateオブジェクトであるRangeを構築できるかどうかを確認し、その範囲で.each
を呼び出します。 Dateオブジェクトがsucc
メソッドをサポートしている場合、これはうまくいくはずです。
考えるstart_date
& end_date
:言っ
(start_date..end_date).each do |date|
# do things with date
end
Davidとして、これが原因Date#succ可能です。 Date#strftime
を使用すると、希望の形式で日付を取得できます。
'from_date.step(to_date)'は別の方法です。 – steenslag