生成过去12个月的月末日期

时间:2013-07-21 14:39:20

标签: ruby-on-rails ruby

我需要一个方法来生成一个数组,其中包含过去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

4 个答案:

答案 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

注意,如果您想要正确的月份顺序,您还应该调用反向