我需要在Ruby on Rails应用程序中循环几个月 . 对于每个月,我需要找到该月的第一天和最后一天 . 然后在单独的查询中使用这些日期来查找在这些日期期间发生的事件并对它们运行计算 .
最初,我尝试过类似的东西:
(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
当然,如果11个月前涉及回到上一年,那么这一年的情况不会更新 . 并且,我不认为这种类型的for / each循环有效 . 我也尝试将数字映射到数组并使用相同的方法,但收到错误 .
完成这样的事情的最佳方法是什么?
4 回答
首先,计算两个日期之间的月数(由Massimiliano Peluso提供):
然后从开始月份开始计算每个月后,找到第一个/最后一个日期并附加到累加器数组 .
现在
dates
将包含一个数组,其中包含与每个月的第一个和最后一个日期对应的嵌套Date
对 . 这个dates
数组很容易迭代进行处理 .这是在Rails 3.2.5 / Ruby 1.9.3p194中测试和使用的
这是一种方法:
=>