class ActiveSupport::Duration - activesupport-4.2.3 Documentation

# class ActiveSupport::Duration

Provides accurate date and time measurements using Date#advance and Time#advance, respectively. It mainly supports the methods on Numeric.

    1.month.ago       # equivalent to Time.now.advance(months: -1)

### Attributes

parts[RW]
value[RW]

### Public Instance Methods

+(other) click to toggle source

Adds another Duration or a Numeric to this Duration. Numeric values are treated as seconds.

    # File lib/active_support/duration.rb, line 18
    def +(other)
      if Duration === other
        Duration.new(value + other.value, @parts + other.parts)
      else
        Duration.new(value + other, @parts + [[:seconds, other]])
      end
    end

-(other) click to toggle source

Subtracts another Duration or a Numeric from this Duration. Numeric values are treated as seconds.

    # File lib/active_support/duration.rb, line 28
    def -(other)
      self + (-other)
    end

==(other) click to toggle source

Returns `true` if `other` is also a Duration instance with the same `value`, or if `other == value`.

    # File lib/active_support/duration.rb, line 47
    def ==(other)
      if Duration === other
        other.value == value
      else
        other == value
      end
    end

ago(time = ::Time.current) click to toggle source

Calculates a new Time or Date that is as far in the past as this Duration represents.

    # File lib/active_support/duration.rb, line 108
    def ago(time = ::Time.current)
      sum(-1, time)
    end

Also aliased as: until
eql?(other) click to toggle source

Returns `true` if `other` is also a Duration instance, which has the same parts as this one.

    # File lib/active_support/duration.rb, line 85
    def eql?(other)
      Duration === other && other.value.eql?(value)
    end

from_now(time = ::Time.current)
Alias for: since
hash() click to toggle source

    # File lib/active_support/duration.rb, line 89
    def hash
      @value.hash
    end

respond_to_missing?(method, include_private=false) click to toggle source

    # File lib/active_support/duration.rb, line 125
    def respond_to_missing?(method, include_private=false) #:nodoc
      @value.respond_to?(method, include_private)
    end

since(time = ::Time.current) click to toggle source

Calculates a new Time or Date that is as far in the future as this Duration represents.

    # File lib/active_support/duration.rb, line 101
    def since(time = ::Time.current)
      sum(1, time)
    end

Also aliased as: from_now
to_i() click to toggle source

Returns the number of seconds that this Duration represents.

    1.minute.to_i   # => 60
    1.hour.to_i     # => 3600
    1.day.to_i      # => 86400

Note that this conversion makes some assumptions about the duration of some periods, e.g. months are always 30 days and years are 365.25 days:

    # equivalent to 30.days.to_i
    1.month.to_i    # => 2592000

    # equivalent to 365.25.days.to_i
    1.year.to_i     # => 31557600

In such cases, Ruby's core Date and Time should be used for precision date and time arithmetic.

    # File lib/active_support/duration.rb, line 79
    def to_i
      @value.to_i
    end

to_s() click to toggle source

    # File lib/active_support/duration.rb, line 55
    def to_s
      @value.to_s
    end

until(time = ::Time.current)
Alias for: ago