Module: PassiveSupport::CoreExtensions::Numeric::Time

Included in:
Numeric
Defined in:
lib/passive_support/core_ext/numeric/time.rb

Overview

Enables the use of time calculations and declarations, like 45.minutes + 2.hours + 4.years.

These methods use Time#advance for precise date calculations when using from_now, ago, etc. as well as adding or subtracting their results from a Time object. For example:

# equivalent to Time.now.advance(:months => 1)
1.month.from_now

# equivalent to Time.now.advance(:years => 2)
2.years.from_now

# equivalent to Time.now.advance(:months => 4, :years => 5)
(4.months + 5.years).from_now

While these methods provide precise calculation when used as in the examples above, care should be taken to note that this is not true if the result of ‘months’, ‘years’, etc is converted before use:

# equivalent to 30.days.to_i.from_now
1.month.to_i.from_now

# equivalent to 365.25.days.to_f.from_now
1.year.to_f.from_now

In such cases, Ruby’s core Date and Time should be used for precision date and time arithmetic

Instance Method Summary collapse

Instance Method Details

#ago(time = ::Time.now) ⇒ Object Also known as: until

Reads best without arguments: 10.minutes.ago



64
65
66
# File 'lib/passive_support/core_ext/numeric/time.rb', line 64

def ago(time = ::Time.now)
  time - self
end

#daysObject Also known as: day



48
49
50
# File 'lib/passive_support/core_ext/numeric/time.rb', line 48

def days
  PassiveSupport::Duration.new(self * 24.hours, [[:days, self]])
end

#fortnightsObject Also known as: fortnight



58
59
60
# File 'lib/passive_support/core_ext/numeric/time.rb', line 58

def fortnights
  PassiveSupport::Duration.new(self * 2.weeks, [[:days, self * 14]])
end

#hoursObject Also known as: hour



43
44
45
# File 'lib/passive_support/core_ext/numeric/time.rb', line 43

def hours
  PassiveSupport::Duration.new(self * 3600, [[:seconds, self * 3600]])
end

#minutesObject Also known as: minute



38
39
40
# File 'lib/passive_support/core_ext/numeric/time.rb', line 38

def minutes
  PassiveSupport::Duration.new(self * 60, [[:seconds, self * 60]])
end

#secondsObject Also known as: second



33
34
35
# File 'lib/passive_support/core_ext/numeric/time.rb', line 33

def seconds
  PassiveSupport::Duration.new(self, [[:seconds, self]])
end

#since(time = ::Time.now) ⇒ Object Also known as: from_now

Reads best with argument: 10.minutes.since(time)



72
73
74
# File 'lib/passive_support/core_ext/numeric/time.rb', line 72

def since(time = ::Time.now)
  time + self
end

#weeksObject Also known as: week



53
54
55
# File 'lib/passive_support/core_ext/numeric/time.rb', line 53

def weeks
  PassiveSupport::Duration.new(self * 7.days, [[:days, self * 7]])
end