класс ActiveSupport::Duration
Обеспечивает точные измерения дат и времени с использованием Date#advance и Time#advance соответственно. В основном поддерживает методы в Numeric.
1.month.ago # equivalent to Time.now.advance(months: -1)
Атрибуты
Открытые методы экземпляров
# 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 Добавляет другой Duration или Numeric к этому Duration. Значения Numeric обрабатываются как секунды.
# File activesupport/lib/active_support/duration.rb, line 47
def ==(other)
if Duration === other
other.value == value
else
other == value
end
end Возвращает true, если other также является экземпляром Duration с теми же value, или если other == value.
# File activesupport/lib/active_support/duration.rb, line 108 def ago(time = ::Time.current) sum(-1, time) end
Вычисляет новую дату Time или Date, которая находится в прошлом так же, как это представляет Duration.
# File activesupport/lib/active_support/duration.rb, line 85 def eql?(other) Duration === other && other.value.eql?(value) end
Возвращает true, если other также является экземпляром Duration, имеющим те же части, что и у этого.
# File activesupport/lib/active_support/duration.rb, line 89 def hash @value.hash end
# File activesupport/lib/active_support/duration.rb, line 125 def respond_to_missing?(method, include_private=false) #:nodoc @value.respond_to?(method, include_private) end
# File activesupport/lib/active_support/duration.rb, line 101 def since(time = ::Time.current) sum(1, time) end
Вычисляет новую дату Time или Date, которая находится в будущем так же, как это представляет Duration.
# File activesupport/lib/active_support/duration.rb, line 79 def to_i @value.to_i end
Возвращает количество секунд, которые представляет этот Duration.
1.minute.to_i # => 60 1.hour.to_i # => 3600 1.day.to_i # => 86400
Обратите внимание, что это преобразование делает некоторые предположения о продолжительности некоторых периодов, например, месяцы всегда составляют 30 дней, а годы — 365,25 дней:
# equivalent to 30.days.to_i 1.month.to_i # => 2592000 # equivalent to 365.25.days.to_i 1.year.to_i # => 31557600
В таких случаях для точных вычислений дат и времени следует использовать встроенные Ruby Date и Time.
# File activesupport/lib/active_support/duration.rb, line 55 def to_s @value.to_s end
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.