class ActiveSupport::TimeWithZone

def -(other)


Time.zone.now - 1.day.ago # => 86399.999967

will be returned.
If both the TimeWithZone object and the other value act like Time, a Float

now - 1.day # => Sun, 02 Nov 2014 00:26:28.725182881 EDT -04:00
now - 24.hours # => Sun, 02 Nov 2014 01:26:28.725182881 EDT -04:00

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

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

now - 1000 # => Mon, 03 Nov 2014 00:09:48.725182881 EST -05:00
now = Time.zone.now # => Mon, 03 Nov 2014 00:26:28.725182881 EST -05:00
Time.zone = 'Eastern Time (US & Canada)' # => 'Eastern Time (US & Canada)'

other time and return the difference in seconds as a Float.
the other value +acts_like?+ time. In which case, it will subtract the
Subtracts an interval of time and returns a new TimeWithZone object unless
def -(other)
  if other.acts_like?(:time)
    to_time - other.to_time
  elsif duration_of_variable_length?(other)
    method_missing(:-, other)
  else
    result = utc.acts_like?(:date) ? utc.ago(other) : utc - other rescue utc.ago(other)
    result.in_time_zone(time_zone)
  end
end