1

感谢Stefan,我能够创建一个返回多个日期范围的函数:

def years
  [2013, 2012, 2011, 2010, 2009]
end

def month_ranges
  years.flat_map { |y|
    12.downto(1).map { |m| Date.new(y,m,1)..Date.new(y,m,-1) }
  }
end

# => 

[
  Mon, 01 Dec 2013..Wed, 31 Dec 2013, 
  Sat, 01 Nov 2013..Sun, 30 Nov 2013, 
  Wed, 01 Oct 2013..Fri, 31 Oct 2013, 
  Mon, 01 Sep 2013..Tue, 30 Sep 2013
]

现在,有没有办法让这个日期数组也从当年的当前月份开始?在接下来的几年里,它应该总是从十二月开始,到一月结束。

感谢任何能提供帮助的人。

4

2 回答 2

2

简单的答案:对照当年检查年份。如果它们相等,则从当前月份开始,如果不相等,则从 12 开始。

years = [2013, 2012, 2011, 2010, 2009]

def month_ranges
  years.flat_map { |y|
    if y == Date.today.year
      start = Date.today.month
    else
      start = 12
    end
    start.downto(1).map { |m| Date.new(y,m,1)..Date.new(y,m,-1) }
  }
end
于 2013-09-25T16:39:35.213 回答
2

要以前面问题中要求的格式提供结果:

require 'date'
years = [2013, 2012, 2011, 2010, 2009]
years.map(&:to_s).product([*'-01'..'-12'].reverse).map(&:join).select{|d| d <= Date.today.to_s[0..-3]}

=> [“2013-09”,“2013-08”,...,“2009-01”]

于 2013-09-25T16:53:57.037 回答