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
-
- 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 |
= |
2592000 |
|
|
SECONDS_PER_YEAR |
= |
31557600 |
|
|
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
Class Public methods
parse(iso8601duration)
Link
Creates a new Duration from string formatted
according to ISO 8601 Duration.
See ISO 8601
for more information. This method allows negative parts to be present in
pattern. If invalid string is provided, it will raise
ActiveSupport::Duration::ISO8601Parser::ParsingError
.
Source:
show
| on GitHub
def parse(iso8601duration)
parts = ISO8601Parser.new(iso8601duration).parse!
new(calculate_total_seconds(parts), parts)
end
Instance Public methods
Source:
show
| on GitHub
def +(other)
if Duration === other
Duration.new(value + other.value, @parts + other.parts)
else
Duration.new(value + other, @parts + [[:seconds, other]])
end
end
Returns true
if other
is also a Duration instance with the same
value
, or if other == value
.
Source:
show
| on GitHub
def ==(other)
if Duration === other
other.value == value
else
other == value
end
end
ago(time = ::Time.current)
Link
Calculates a new Time or Date that is as far in the past as this Duration represents.
Source:
show
| on GitHub
def ago(time = ::Time.current)
sum(-1, time)
end
Returns true
if other
is also a Duration instance, which has the same parts as
this one.
Source:
show
| on GitHub
def eql?(other)
Duration === other && other.value.eql?(value)
end
from_now(time = ::Time.current)
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.
Source:
show
| on GitHub
def iso8601(precision: nil)
ISO8601Serializer.new(self, precision: precision).serialize
end
since(time = ::Time.current)
Link
Calculates a new Time or Date that is as far in the future as this Duration represents.
Source:
show
| on GitHub
def since(time = ::Time.current)
sum(1, time)
end
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.
Returns the amount of seconds a duration covers as a string. For more
information check #to_i method.
1.day.to_s # => "86400"
until(time = ::Time.current)
Link