我需要一个方法来生成一个数组,其中包含过去12个月中每个月的结束日期。我想出了下面的解决方案。然而,它的工作方式可能更为优雅,可以解决这个问题。有什么建议?有没有更有效的方法来生成这个数组?任何建议都将不胜感激。
require 'active_support/time'
...
def months
last_month_end = (Date.today - 1.month).end_of_month
months = [last_month_end]
11.times do
month_end = (last_month_end - 1.month).end_of_month
months << month_end
end
months
end
答案 0 :(得分:8)
通常当你想要一系列事情开始考虑map
时。虽然你在为什么不推广这样的方法,所以你可以回到任何n
个月你想要的时间:
def last_end_dates(count = 12)
count.times.map { |i| (Date.today - (i+1).month).end_of_month }
end
>> pp last_end_dates(5)
[Sun, 30 Jun 2013,
Fri, 31 May 2013,
Tue, 30 Apr 2013,
Sun, 31 Mar 2013,
Thu, 28 Feb 2013]
答案 1 :(得分:4)
require 'active_support/time'
def months
(1..12).map{|i| (Date.today - i.month).end_of_month}
end
答案 2 :(得分:2)
没有特定的方法,但这可以是一个选项:
(1..12).map { |i| (Date.today - i.month).end_of_month }
没什么特别的,但是做了。
答案 3 :(得分:1)
require 'active_support/time'
(1..12).map do |m|
m.months.ago.end_of_month
end
注意,如果您想要正确的月份顺序,您还应该调用反向