Comment faire une Boucle par Mois en Ruby on Rails
J'ai besoin d'une boucle sur plusieurs mois en Ruby on Rails application. Pour chaque mois, j'ai besoin de trouver le premier et le dernier jour de ce mois. Ces dates sont ensuite utilisées dans une requête distincte pour trouver des événements survenant au cours de ces dates et de l'exécution de calculs sur eux.
D'abord, j'ai essayé quelque chose comme:
(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
Bien sûr, l'année n'est pas mis à jour dans ce cas, dans le cas où il y a 11 mois implique d'aller à l'année précédente. Et, je ne pense pas que ce type de/chaque boucle fonctionne. J'ai aussi essayé de cartographie les nombres d'un tableau et à l'aide de la même méthode, mais il a reçu une erreur.
Quelle est la meilleure façon d'accomplir quelque chose de ce genre?
- Attendez-vous arbitraires dates de début/fin?
Vous devez vous connecter pour publier un commentaire.
D'abord, le nombre de mois entre deux dates (courtoisie de Massimiliano Peluso):
Puis à partir du début du mois, en comptant chaque mois par la suite, de trouver la première/dernière des dates et les ajouter à un accumulateur de tableau.
Maintenant
dates
contiendra un tableau imbriquéDate
paires correspondant au premier et au dernier jour de chaque mois. Cettedates
tableau sera facile pour itérer pour le traitement.C'est testé et de travail dans les Rails 3.2.5/Ruby 1.9.3p194
Fri, 30 Dec 2011
n'est pas le dernier jour de décembreVoici une façon de le faire:
=>
rails 3.0.10
surruby 1.8.7
Date.advance
méthode ne semble pas exister plus. Vous pouvez utiliserDate.next_month
oumydate >> 1
à l'avance 1 mois dans le temps. Voir ruby-doc.org/stdlib-2.1.2/libdoc/date/rdoc/...time += 1.month