Module: InactiveSupport::CoreExtensions::Numeric::Time

Included in:
Numeric
Defined in:
lib/inactive_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



74
75
76
# File 'lib/inactive_support/core_ext/numeric/time.rb', line 74

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

#daysObject Also known as: day



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

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

#fortnightsObject Also known as: fortnight



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

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

#hoursObject Also known as: hour



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

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

#minutesObject Also known as: minute



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

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

#monthsObject Also known as: month



63
64
65
# File 'lib/inactive_support/core_ext/numeric/time.rb', line 63

def months
  InactiveSupport::Duration.new(self * 30.days, [[:months, self]])
end

#secondsObject Also known as: second



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

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

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

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



82
83
84
# File 'lib/inactive_support/core_ext/numeric/time.rb', line 82

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

#weeksObject Also known as: week



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

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

#yearsObject Also known as: year



68
69
70
# File 'lib/inactive_support/core_ext/numeric/time.rb', line 68

def years
  InactiveSupport::Duration.new(self * 365.25.days, [[:years, self]])
end