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)
Namespace
Methods
- #
- A
- B
- E
- F
- H
- I
- P
- S
- T
- U
Constants
SECONDS_PER_MINUTE | = | 60 |
SECONDS_PER_HOUR | = | 3600 |
SECONDS_PER_DAY | = | 86400 |
SECONDS_PER_WEEK | = | 604800 |
SECONDS_PER_MONTH | = | 2629746 |
SECONDS_PER_YEAR | = | 31556952 |
PARTS_IN_SECONDS | = | { seconds: 1, minutes: SECONDS_PER_MINUTE, hours: SECONDS_PER_HOUR, days: SECONDS_PER_DAY, weeks: SECONDS_PER_WEEK, months: SECONDS_PER_MONTH, years: SECONDS_PER_YEAR }.freeze |
Attributes
[RW] | parts | |
[RW] | value |
Class Public methods
parse(iso8601duration)
Link
Instance Public methods
*(other)
Link
# File activesupport/lib/active_support/duration.rb, line 223 def *(other) if Scalar === other || Duration === other Duration.new(value * other.value, parts.map { |type, number| [type, number * other.value] }) elsif Numeric === other Duration.new(value * other, parts.map { |type, number| [type, number * other] }) else raise_type_error(other) end end
+(other)
Link
# File activesupport/lib/active_support/duration.rb, line 203 def +(other) if Duration === other parts = @parts.dup other.parts.each do |(key, value)| parts[key] += value end Duration.new(value + other.value, parts) else seconds = @parts[:seconds] + other Duration.new(value + other, @parts.merge(seconds: seconds)) end end
-(other)
Link
/(other)
Link
# File activesupport/lib/active_support/duration.rb, line 234 def /(other) if Scalar === other || Duration === other Duration.new(value / other.value, parts.map { |type, number| [type, number / other.value] }) elsif Numeric === other Duration.new(value / other, parts.map { |type, number| [type, number / other] }) else raise_type_error(other) end end
<=>(other)
Link
==(other)
Link
Returns true
if other
is also a Duration instance with the same
value
, or if other == value
.
ago(time = ::Time.current)
Link
eql?(other)
Link
Returns true
if other
is also a Duration instance, which has the same parts as
this one.
hash()
Link
iso8601(precision: nil)
Link
Build ISO 8601 Duration string for this
duration. The precision
parameter can be used to limit
seconds' precision of duration.
since(time = ::Time.current)
Link
to_i()
Link
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 1/12 of year and years are 365.2425 days:
# equivalent to (1.year / 12).to_i
1.month.to_i # => 2629746
# equivalent to 365.2425.days.to_i
1.year.to_i # => 31556952
In such cases, Ruby's core Date and Time should be used for precision date and time arithmetic.