edge badge

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)
Methods
#
A
E
F
H
S
T
U
Attributes
[RW] parts
[RW] value
Instance Public methods
+(other)

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

# File activesupport/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)

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

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

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

# File activesupport/lib/active_support/duration.rb, line 47
def ==(other)
  if Duration === other
    other.value == value
  else
    other == value
  end
end
ago(time = ::Time.current)

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

Also aliased as: until
# File activesupport/lib/active_support/duration.rb, line 112
def ago(time = ::Time.current)
  sum(-1, time)
end
eql?(other)

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

# File activesupport/lib/active_support/duration.rb, line 89
def eql?(other)
  Duration === other && other.value.eql?(value)
end
from_now(time = ::Time.current)
Alias for: since
hash()
# File activesupport/lib/active_support/duration.rb, line 93
def hash
  @value.hash
end
since(time = ::Time.current)

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

Also aliased as: from_now
# File activesupport/lib/active_support/duration.rb, line 105
def since(time = ::Time.current)
  sum(1, time)
end
to_i()

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 activesupport/lib/active_support/duration.rb, line 83
def to_i
  @value.to_i
end
to_s()

Returns the amount of seconds a duration covers as a string. For more information check #to_i method.

1.day.to_s # => "86400"
# File activesupport/lib/active_support/duration.rb, line 59
def to_s
  @value.to_s
end
until(time = ::Time.current)
Alias for: ago