Method: ActiveSupport::TimeWithZone#+

Defined in:
lib/active_support/time_with_zone.rb

#+(other) ⇒ Object Also known as: since, in

Adds an interval of time to the current object’s time and returns that value as a new TimeWithZone object.

Time.zone = 'Eastern Time (US & Canada)' # => 'Eastern Time (US & Canada)'
now = Time.zone.now # => Sun, 02 Nov 2014 01:26:28.725182881 EDT -04:00
now + 1000          # => Sun, 02 Nov 2014 01:43:08.725182881 EDT -04:00

If we’re adding a Duration of variable length (i.e., years, months, days), move forward from #time, otherwise move forward from #utc, for accuracy when moving across DST boundaries.

For instance, a time + 24.hours will advance exactly 24 hours, while a time + 1.day will advance 23-25 hours, depending on the day.

now + 24.hours      # => Mon, 03 Nov 2014 00:26:28.725182881 EST -05:00
now + 1.day         # => Mon, 03 Nov 2014 01:26:28.725182881 EST -05:00


309
310
311
312
313
314
315
316
# File 'lib/active_support/time_with_zone.rb', line 309

def +(other)
  if duration_of_variable_length?(other)
    method_missing(:+, other)
  else
    result = utc.acts_like?(:date) ? utc.since(other) : utc + other rescue utc.since(other)
    result.in_time_zone(time_zone)
  end
end