класс ActiveSupport::Duration
Обеспечивает точные измерения дат и времени с помощью Date#advance и Time#advance соответственно. В основном поддерживает методы для Числовых значений.
1.month.ago # equivalent to Time.now.advance(months: -1)
Константы
- PARTS_IN_SECONDS
- СЕКУНДЫ_В_СУТКИ
- СЕКУНДЫ_В_ЧАС
- СЕКУНДЫ_В_МИНУТУ
- СЕКУНДЫ_В_МЕСЯЦ
- СЕКУНДЫ_В_НЕДЕЛЮ
- СЕКУНДЫ_В_ГОД
Атрибуты
Публичные методы класса
# File activesupport/lib/active_support/duration.rb, line 38 def parse(iso8601duration) parts = ISO8601Parser.new(iso8601duration).parse! new(calculate_total_seconds(parts), parts) end
Создает новый Duration из строки, отформатированной в соответствии с ISO 8601 Duration.
См. ISO 8601 для получения дополнительной информации. Этот метод позволяет использовать отрицательные части в шаблоне. Если предоставлена недопустимая строка, будет вызвано ActiveSupport::Duration::ISO8601Parser::ParsingError.
Публичные методы экземпляра
# File activesupport/lib/active_support/duration.rb, line 92
def +(other)
if Duration === other
Duration.new(value + other.value, @parts + other.parts)
else
Duration.new(value + other, @parts + [[:seconds, other]])
end
end Добавляет другой Duration или Числовое значение к этому Duration. Числовые значения обрабатываются как секунды.
# File activesupport/lib/active_support/duration.rb, line 121
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 180 def ago(time = ::Time.current) sum(-1, time) end
Вычисляет новую Time или Date, которая находится в прошлом на период времени, который представляет этот Duration.
# File activesupport/lib/active_support/duration.rb, line 163 def eql?(other) Duration === other && other.value.eql?(value) end
Возвращает true, если other также является экземпляром Duration с теми же частями, что и этот.
# File activesupport/lib/active_support/duration.rb, line 167 def hash @value.hash end
# File activesupport/lib/active_support/duration.rb, line 203 def iso8601(precision: nil) ISO8601Serializer.new(self, precision: precision).serialize end
Генерирует строку ISO 8601 Duration для данного интервала времени. Параметр precision может быть использован для ограничения точности секунд в строке.
# File activesupport/lib/active_support/duration.rb, line 173 def since(time = ::Time.current) sum(1, time) end
Вычисляет новую Time или Date, которая находится в будущем на период времени, который представляет этот Duration.
# File activesupport/lib/active_support/duration.rb, line 157 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 133 def to_s @value.to_s end
Возвращает количество секунд, покрываемых интервалом времени, в виде строки. Более подробная информация находится в методе #to_i.
1.day.to_s # => "86400"
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.