2012-09-22 18 views
13

例に基づいて、数ヶ月の配列を作成する方法をレール。は、日付の範囲、私が持っている

この範囲に基づいて月配列を作成するにはどうすればよいですか?

例:

私は数ヶ月の日付23/1/2012と15/3/2012

を持っているがJanuar、Februarとマートです。

私は["1/1/2012", "1/2/2012", "1/3/2012"]

ような配列を取得したいと範囲は、2012年10月10日

に25/6/2012をbetweeenれた場合、配列は次のようになります。["1/6/2012", "1/7/2012", "1/8/2012", "1/9/2012", "1/10/2012"]

+0

...ステップ間隔を1か月としますか? –

+0

ここをクリックしてください:http://stackoverflow.com/questions/5887756/rails-calculate-date-range-in-months –

+0

私はちょうど例で私のqustionを更新しました。 –

答えて

28
require 'date' 

date_from = Date.parse('2011-10-14') 
date_to = Date.parse('2012-04-30') 
date_range = date_from..date_to 

date_months = date_range.map {|d| Date.new(d.year, d.month, 1) }.uniq 
date_months.map {|d| d.strftime "%d/%m/%Y" } 
# => ["01/10/2011", "01/11/2011", "01/12/2011", "01/01/2012", 
#  "01/02/2012", "01/03/2012", "01/04/2012"] 
6

Railsのactivesupportのコア拡張にDate:beginning_of_monthのメソッドが含まれています。次のようにあなたの関数が記述できます。

def beginning_of_month_date_list(start, finish) 
    (start.to_date..finish.to_date).map(&:beginning_of_month).uniq.map(&:to_s) 
end 

警告:これは、より効率的に書き込むことができ、予想される順序であるが、それ以外はあなたが探しているヶ月を与える必要があります開始と終了を前提としています。また、書式シンボルを#to_sメソッドに渡して、期待される月形式を取得することもできます。

+0

私は運がなければこれを試しました。私は私のループのためにそれを使用する必要があります。詳細はこちら:http://stackoverflow.com/questions/12544533/rails-how-to-create-chart-data-for-each-month-between-2-dates –

+0

Itあなたが得ている結果を見るのに役立ちます。 – rossta

+0

質問を結果に更新しました。 –

関連する問題