Wie eine Schleife durch die Monate in Ruby on Rails
Brauche ich eine Schleife über mehrere Monate in einer Ruby on Rails Anwendung. Für jeden Monat, ich muss die erste und Letzte Tag des angegebenen Monats. Diese Daten werden anschließend in einer separaten Abfrage zu finden, Ereignisse, die während dieser Termine und ausführen von Berechnungen auf Sie.
Zunächst habe ich versucht, etwas wie:
(11.months.ago.to_date.month..Date.today.month).each do |m|
start_date = '01-#{m}-#{Date.today.year}'.to_date.beginning_of_month
end_date = '01-#{m}-#{Date.today.year}'.to_date.end_of_month
end
Natürlich das Jahr nicht mehr aktualisiert, in diesem Fall in das Ereignis, das vor 11 Monaten beinhaltet gehen Sie zurück zum vorherigen Jahr. Und ich glaube nicht, dass diese Art der for/each-Schleife funktioniert. Ich habe auch versucht Zuordnung der zahlen in ein array und verwenden Sie die gleiche Methode, aber erhielt eine Fehlermeldung.
Was ist der beste Weg, um etwas zu erreichen, wie dies?
- Rechnen Sie beliebige start - /Endtermin?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens zählen die Anzahl der Monate zwischen zwei Datumsangaben (mit freundlicher Genehmigung von Massimiliano Peluso):
Dann von Anfang Monat, zählen jeden Monat danach, finden die ersten/letzten Daten und Anhängen, um ein Akkumulator-array.
Nun
dates
enthält ein array mit verschachteltenDate
Paare der entsprechenden ersten und letzten Tag jedes Monats. Diesedates
array einfach Durchlaufen für die Verarbeitung.Dies ist getestet und funktioniert in Rails 3.2.5/Ruby-1.9.3p194
Fri, 30 Dec 2011
ist nicht der Letzte Tag im DezemberHier ist ein Weg, es zu tun:
=>
rails 3.0.10
aufruby 1.8.7
Date.advance
Methode scheint nicht mehr vorhanden ist. Sie könnenDate.next_month
odermydate >> 1
Voraus 1 Monat in der Zeit. Siehe ruby-doc.org/stdlib-2.1.2/libdoc/date/rdoc/...time += 1.month