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
]

さて、この日付配列を今年の現在の月から開始する方法はありますか? 次の年は、常に 12 月に開始し、1 月に終了する必要があります。

助けてくれる人に感謝します。

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 年 9 月", "2013 年 8 月",..., "2009 年 1 月"]

于 2013-09-25T16:53:57.037 に答える