Method: Date#advance
- Defined in:
- activesupport/lib/active_support/core_ext/date/calculations.rb
#advance(options) ⇒ Object
Provides precise Date calculations for years, months, and days. The options
parameter takes a hash with any of these keys: :years
, :months
, :weeks
, :days
.
The increments are applied in order of time units from largest to smallest. In other words, the date is incremented first by :years
, then by :months
, then by :weeks
, then by :days
. This order can affect the result around the end of a month. For example, incrementing first by months then by days:
Date.new(2004, 9, 30).advance(months: 1, days: 1)
# => Sun, 31 Oct 2004
Whereas incrementing first by days then by months yields a different result:
Date.new(2004, 9, 30).advance(days: 1).advance(months: 1)
# => Mon, 01 Nov 2004
127 128 129 130 131 132 133 134 135 136 |
# File 'activesupport/lib/active_support/core_ext/date/calculations.rb', line 127 def advance() d = self d = d >> [:years] * 12 if [:years] d = d >> [:months] if [:months] d = d + [:weeks] * 7 if [:weeks] d = d + [:days] if [:days] d end |