2012-09-22 8 views
13

Beispiel Ich habe zu erstellen:Schienen, wie ein Array von Monaten auf der Grundlage einer Reihe von Terminen

range = start.to_date..(end.to_date + 1.day) 

Ende und starten Sie sind Termine.

Wie erstelle ich ein Monatsarray basierend auf diesem Bereich?

Beispiel:

Ich habe die Daten 23/1/2012 15/3/2012 und

Die Monate sind Januar, Februar und Marts.

Ich möchte ein Array erhalten wie ["1/1/2012", "1/2/2012", "1/3/2012"]

und wenn der Bereich 25/6/2012 zum 10.10.2012

das Array wäre betweeen wurde: ["1/6/2012", "1/7/2012", "1/8/2012", "1/9/2012", "1/10/2012"]

+0

... unter der Annahme eines Schritt-Intervalls von 1 Monat? –

+0

Schau mal hier: http://stackoverflow.com/questions/5887756/rails-calculate-date-range-in-months –

+0

Ich habe gerade meine Frage mit Beispielen aktualisiert. –

Antwort

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 Active core extensions enthält eine Methode für Date: Beginn_of_month. Ihre Funktion könnte wie folgt geschrieben werden:

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

Caveats: diese effizienter geschrieben werden konnte, übernimmt Start und Ziel sind in der erwarteten Reihenfolge, aber ansonsten sollten Sie die Monate geben Sie suchen. Sie können auch ein Formatsymbol an die Methode #to_s übergeben, um das erwartete Monatsformat zu erhalten.

+0

Ich habe das ohne Glück versucht. Ich muss es für meine Schleife verwenden, sehen Sie mehr hier: http://stackoverflow.com/questions/12544533/rails-how-to-create-chart-data-for-each-month-between-2-dates –

+0

It würde helfen, das Ergebnis zu sehen, das Sie bekommen. – rossta

+0

Ich habe die Frage mit dem Ergebnis aktualisiert. –

Verwandte Themen