Ruby on Rails 5.2 - ActiveSupport::Duration

वर्ग ActiveSupport :: अवधि




ruby

वर्ग ActiveSupport :: अवधि

जनक:
Object

क्रमशः Date#advance और Time#advance का उपयोग करके सटीक तिथि और समय माप प्रदान करता है। यह मुख्य रूप से Numeric के तरीकों का समर्थन करता है।

1.month.ago       # equivalent to Time.now.advance(months: -1)

स्थिरांक

PARTS
PARTS_IN_SECONDS
SECONDS_PER_DAY
SECONDS_PER_HOUR
SECONDS_PER_MINUTE
SECONDS_PER_MONTH
SECONDS_PER_WEEK
SECONDS_PER_YEAR

गुण

भागों [आरडब्ल्यू]
मान [RW]

पब्लिक क्लास के तरीके

निर्माण (मूल्य) दिखाएँ स्रोत
# File activesupport/lib/active_support/duration.rb, line 184
def build(value)
  parts = {}
  remainder = value.to_f

  PARTS.each do |part|
    unless part == :seconds
      part_in_seconds = PARTS_IN_SECONDS[part]
      parts[part] = remainder.div(part_in_seconds)
      remainder = (remainder % part_in_seconds).round(9)
    end
  end

  parts[:seconds] = remainder

  new(value, parts)
end

अलग-अलग भागों में परिवर्तित होने वाले सेकंड मान से एक नया Duration बनाता है:

ActiveSupport::Duration.build(31556952).parts # => {:years=>1}
ActiveSupport::Duration.build(2716146).parts  # => {:months=>1, :days=>1}
पार्स (iso8601duration) स्रोत दिखाएं
# File activesupport/lib/active_support/duration.rb, line 139
def parse(iso8601duration)
  parts = ISO8601Parser.new(iso8601duration).parse!
  new(calculate_total_seconds(parts), parts)
end

आईएसओ 8601 Duration अनुसार तैयार किए गए स्ट्रिंग से एक नई Duration बनाता है।

अधिक जानकारी के लिए आईएसओ 8601 देखें। यह विधि नकारात्मक भागों को पैटर्न में मौजूद होने की अनुमति देती है। यदि अमान्य स्ट्रिंग प्रदान किया गया है, तो यह ActiveSupport::Duration::ISO8601Parser::ParsingError

सार्वजनिक प्रवृत्ति के तरीके

# File activesupport/lib/active_support/duration.rb, line 281
def %(other)
  if Duration === other || Scalar === other
    Duration.build(value % other.value)
  elsif Numeric === other
    Duration.build(value % other)
  else
    raise_type_error(other)
  end
end

इस Duration के मॉड्यूल को किसी अन्य Duration या Numeric द्वारा लौटाता है। Numeric मानों को सेकंड के रूप में माना जाता है।

# File activesupport/lib/active_support/duration.rb, line 256
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

इस Duration को एक Numeric गुणा करता है और एक नई Duration देता है।

# File activesupport/lib/active_support/duration.rb, line 236
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

इस Duration लिए एक और Duration या एक Numeric जोड़ता है। Numeric मानों को सेकंड के रूप में माना जाता है।

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

इस Duration से एक और Duration या एक Numeric है। Numeric मानों को सेकंड के रूप में माना जाता है।

# File activesupport/lib/active_support/duration.rb, line 267
def /(other)
  if Scalar === other
    Duration.new(value / other.value, parts.map { |type, number| [type, number / other.value] })
  elsif Duration === other
    value / other.value
  elsif Numeric === other
    Duration.new(value / other, parts.map { |type, number| [type, number / other] })
  else
    raise_type_error(other)
  end
end

एक Numeric द्वारा इस Duration को विभाजित करता है और एक नया Duration देता है।

# File activesupport/lib/active_support/duration.rb, line 226
def <=>(other)
  if Duration === other
    value <=> other.value
  elsif Numeric === other
    value <=> other
  end
end

इस Duration लिए एक Duration को दूसरे या एक Numeric साथ तुलना करता है। Numeric मानों को सेकंड के रूप में माना जाता है।

# File activesupport/lib/active_support/duration.rb, line 306
def ==(other)
  if Duration === other
    other.value == value
  else
    other == value
  end
end

यदि other समान Duration साथ Duration उदाहरण है, या यदि other == value

बाद (समय = :: Time.current)
के लिए उपनाम: के since
पहले (समय = :: Time.current) स्रोत दिखाएँ
# File activesupport/lib/active_support/duration.rb, line 366
def ago(time = ::Time.current)
  sum(-1, time)
end

एक नए Time या Date गणना करता है जो कि इस Duration में अतीत का है।

इसके अलावा उर्फ: until , before
इससे पहले (समय = :: Time.current)
अन्य के लिए उपनाम: ago
# File activesupport/lib/active_support/duration.rb, line 348
def eql?(other)
  Duration === other && other.value.eql?(value)
end

यदि other Duration भी है, तो यह true , जिसके हिस्से समान हैं।

from_now (समय = :: Time.current)
के लिए उपनाम: के since
# File activesupport/lib/active_support/duration.rb, line 352
def hash
  @value.hash
end
iso8601 (परिशुद्धता: nil) स्रोत दिखाएँ
# File activesupport/lib/active_support/duration.rb, line 396
def iso8601(precision: nil)
  ISO8601Serializer.new(self, precision: precision).serialize
end

इस अवधि के लिए ISO 8601 Duration स्ट्रिंग बनाएँ। precision पैरामीटर का उपयोग सेकंड की अवधि की शुद्धता को सीमित करने के लिए किया जा सकता है।

चूंकि (समय = :: Time.current) स्रोत दिखाएं
# File activesupport/lib/active_support/duration.rb, line 358
def since(time = ::Time.current)
  sum(1, time)
end

एक नए Time या Date गणना करता है जो भविष्य में इस Duration प्रतिनिधित्व करता है।

के रूप में भी उपनाम: from_now , के after
# File activesupport/lib/active_support/duration.rb, line 342
def to_i
  @value.to_i
end

इस Duration प्रतिनिधित्व करता है कि सेकंड की संख्या देता है।

1.minute.to_i   # => 60
1.hour.to_i     # => 3600
1.day.to_i      # => 86400

ध्यान दें कि यह रूपांतरण कुछ अवधियों की अवधि के बारे में कुछ धारणाएँ बनाता है, जैसे महीने हमेशा 1/12 वर्ष और वर्ष 365.2425 वर्ष होते हैं:

# equivalent to (1.year / 12).to_i
1.month.to_i    # => 2629746

# equivalent to 365.2425.days.to_i
1.year.to_i     # => 31556952

ऐसे मामलों में, रूबी के कोर Date और Time का उपयोग सटीक तिथि और समय अंकगणित के लिए किया जाना चाहिए।

# File activesupport/lib/active_support/duration.rb, line 318
def to_s
  @value.to_s
end

एक स्ट्रिंग के रूप में एक अवधि कवर सेकंड की मात्रा देता है। अधिक जानकारी के लिए #to_i विधि की जाँच करें।

1.day.to_s # => "86400"
तक (समय = :: Time.current)
अन्य के लिए उपनाम: ago