Rails 4:如何在季度中添加/减去多个季度?

Mis*_*hko 5 ruby-on-rails ruby-on-rails-4

要获得当前季度的开始和结束日期,可以执行以下操作:

start_of_curr_quarter = Time.current.to_date.beginning_of_quarter
end_of_curr_quarter = start_of_curr_quarter.end_of_quarter
Run Code Online (Sandbox Code Playgroud)

要获得上一季度的日期,这似乎是一个合理的方法:

end_of_prev_quarter = Time.current.to_date.beginning_of_quarter - 1
start_of_prev_quarter = end_of_prev_quarter.beginning_of_quarter
Run Code Online (Sandbox Code Playgroud)

我想概括一下.如何在Rails 4中实现以下功能?

def quarter_dates(quarter_offset)
  # --------------------------------------------  
  #    quarter_offset        return value
  # --------------------------------------------
  #          0           current quarter dates
  #          1             prev quarter dates
  #          2         before prev quarter dates
  #         ...                   ...

  # Implementation goes here...

  [start_of_quarter, end_of_quarter]
end
Run Code Online (Sandbox Code Playgroud)

spi*_*ann 5

我会这样做:

def quarter_dates(offset)
  date = Date.today << (offset * 3)
  [date.beginning_of_quarter, date.end_of_quarter]
end

puts quarter_dates(0) #=> [Tue, 01 Apr 2014, Mon, 30 Jun 2014]
puts quarter_dates(1) #=> [Wed, 01 Jan 2014, Mon, 31 Mar 2014]
puts quarter_dates(9) #=> [Sun, 01 Jan 2012, Sat, 31 Mar 2012]
Run Code Online (Sandbox Code Playgroud)