如何从季度获取开始和结束日期?

时间:2018-07-02 12:50:01

标签: ruby-on-rails

我正在构建Rails 5应用程序。 我需要能够获得当前季度的日期。我的意思是,用户将向我提供一个选定的季度(1到4),并将该数字转换为该选定季度的开始和结束日期。我该怎么办?

这是我尝试过的方法,但是很好吗?

def quarter_date(quarter, year)
    if quarter == 1
      where(date_at: Time.parse("01-01-#{year}")..Time.parse("01-03-#{year}"))
    elsif quarter == 2
      where(date_at: Time.parse("01-04-#{year}")..Time.parse("01-06-#{year}"))
    elsif quarter == 3
      where(date_at: Time.parse("01-07-#{year}")..Time.parse("01-09-#{year}"))
    elsif quarter == 4
      where(date_at: Time.parse("01-10-#{year}")..Time.parse("01-12-#{year}"))
    end
  end

1 个答案:

答案 0 :(得分:1)

您的意思是这样的吗?

require 'date'

today = Date.today
 => #<Date: 2018-07-02 ((2458302j,0s,0n),+0s,2299161j)>

year = today.year
 => 2018

input = 3

start_date = Date.new(2018, input * 3 - 2, 1)
 => #<Date: 2018-07-01 ((2458301j,0s,0n),+0s,2299161j)>

end_date = Date.new(2018, input * 3 + 1, 1) - 1
 => #<Date: 2018-09-30 ((2458392j,0s,0n),+0s,2299161j)>

它返回当年给定季度的开始和结束日期。

更新

使用您尝试的方法进行了更新:

def quarter_date_range(quarter, year)
  start_date = Time.parse("#{year}-#{quarter * 3 - 2}-1")
  end_date = (start_date + 2.months).end_of_month
  where(date_at: start_date..end_date)
end