time.rb 2.2 KB
Newer Older
1
require 'active_support/duration'
2 3
require 'active_support/core_ext/time/calculations'
require 'active_support/core_ext/time/acts_like'
J
Jian Weihang 已提交
4 5
require 'active_support/core_ext/date/calculations'
require 'active_support/core_ext/date/acts_like'
6

7 8 9
class Numeric
  # Enables the use of time calculations and declarations, like 45.minutes + 2.hours + 4.years.
  #
10
  # These methods use Time#advance for precise date calculations when using from_now, ago, etc.
11 12
  # as well as adding or subtracting their results from a Time object. For example:
  #
13
  #   # equivalent to Time.current.advance(months: 1)
14 15
  #   1.month.from_now
  #
16
  #   # equivalent to Time.current.advance(years: 2)
17 18
  #   2.years.from_now
  #
19
  #   # equivalent to Time.current.advance(months: 4, years: 5)
20 21 22 23 24
  #   (4.months + 5.years).from_now
  def seconds
    ActiveSupport::Duration.new(self, [[:seconds, self]])
  end
  alias :second :seconds
25

26 27
  # Returns a Duration instance matching the number of minutes provided.
  #
28
  #   2.minutes # => 2 minutes
29
  def minutes
30
    ActiveSupport::Duration.new(self * 60, [[:minutes, self]])
31
  end
32 33
  alias :minute :minutes

34 35
  # Returns a Duration instance matching the number of hours provided.
  #
36
  #   2.hours # => 2 hours
37
  def hours
38
    ActiveSupport::Duration.new(self * 3600, [[:hours, self]])
39 40
  end
  alias :hour :hours
41

42 43 44
  # Returns a Duration instance matching the number of days provided.
  #
  #   2.days # => 2 days
45 46 47 48
  def days
    ActiveSupport::Duration.new(self * 24.hours, [[:days, self]])
  end
  alias :day :days
49

50 51
  # Returns a Duration instance matching the number of weeks provided.
  #
52
  #   2.weeks # => 2 weeks
53
  def weeks
54
    ActiveSupport::Duration.new(self * 7.days, [[:weeks, self]])
55 56
  end
  alias :week :weeks
57

58 59
  # Returns a Duration instance matching the number of fortnights provided.
  #
60
  #   2.fortnights # => 4 weeks
61
  def fortnights
62
    ActiveSupport::Duration.new(self * 2.weeks, [[:weeks, self * 2]])
63 64
  end
  alias :fortnight :fortnights
65

66
  # Returns the number of milliseconds equivalent to the seconds provided.
67
  # Used with the standard time durations, like 1.hour.in_milliseconds --
68
  # so we can feed them to JavaScript functions like getTime().
69 70
  #
  #   2.in_milliseconds # => 2_000
71 72 73
  def in_milliseconds
    self * 1000
  end
74
end