Как добавить переменное количество месяцев к дате в Ruby (избегайте использования цикла) - PullRequest
1 голос
/ 29 мая 2019

Есть ли что-то похожее на код ниже в 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 Ответ

3 голосов
/ 29 мая 2019

Ваш код работает отлично:

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

month - метод, определенный для Integer.Не имеет значения, задано ли целое число как литерал или как переменная.Приемник просто должен быть Integer.


Вместо Time.zone.today вы также можете позвонить Date.current:

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

Обратите внимание, что вы можете использовать 4 и x взаимозаменяемо во всех приведенных выше примерах.

...