Ваш код работает отлично:
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
взаимозаменяемо во всех приведенных выше примерах.