如何在Ruby中为日期添加可变的月数(避免使用循环)

时间:2019-05-29 07:40:36

标签: ruby ruby-on-rails-4

是否与Ruby中的以下代码相似,其中 X 表示要添加到今天日期的月份数,但来自变量

Time.zone.today + X.month ## X comes from a variable

在下面的示例中,最好不使用循环,因为'm'可能会很大

def add_months_to_today(m)
  number_of_months_to_add = m.to_i
  return_date = Time.zone.today
  if m.to_i > 0
    (1..number_of_months_to_add).each do |i|
      return_date = return_date + 1.month
    end     
  end

  return_date
end

1 个答案:

答案 0 :(得分:3)

您的代码可以正常工作:

x = 4
Time.zone.today + x.month
#=> Sun, 29 Sep 2019

month是在Integer上定义的方法。整数是以文字形式还是变量形式都没有关系。接收者只需是Integer


您也可以致电Date.current代替Time.zone.today

Date.current + 4.month  #=> Sun, 29 Sep 2019

Rails还向Date添加了多种其他方法:(也通过DateAndTime::Calculations

Date.current.advance(months: 4) #=> Sun, 29 Sep 2019
Date.current.months_since(4)    #=> Sun, 29 Sep 2019
4.months.since(Date.current)    #=> Sun, 29 Sep 2019

以上内容也适用于Time的实例:

Time.current.advance(months: 4) #=> Sun, 29 Sep 2019 10:11:52 CEST +02:00
Time.current.months_since(4)    #=> Sun, 29 Sep 2019 10:11:52 CEST +02:00
4.months.since                  #=> Sun, 29 Sep 2019 10:11:52 CEST +02:00

仅处理日期时,也可以使用Ruby内置的>>next_month

Date.current >> 4
#=> Sun, 29 Sep 2019

Date.current.next_month(4)
#=> Sun, 29 Sep 2019

请注意,在以上所有示例中,您都可以交替使用4x