Module: ActiveSupport::CoreExtensions::DateTime::Calculations
- Included in:
- DateTime
- Defined in:
- lib/active_support/core_ext/date_time/calculations.rb
Overview
Enables the use of time calculations within DateTime itself
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
-
.included(base) ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#advance(options) ⇒ Object
Uses Date to provide precise Time calculations for years, months, and days.
-
#ago(seconds) ⇒ Object
Returns a new DateTime representing the time a number of seconds ago Do not use this method in combination with x.months, use months_ago instead!.
-
#beginning_of_day ⇒ Object
(also: #midnight, #at_midnight, #at_beginning_of_day)
Returns a new DateTime representing the start of the day (0:00).
-
#change(options) ⇒ Object
Returns a new DateTime where one or more of the elements have been changed according to the
options
parameter. -
#compare_with_coercion(other) ⇒ Object
Layers additional behavior on DateTime#<=> so that Time and ActiveSupport::TimeWithZone instances can be compared with a DateTime.
-
#end_of_day ⇒ Object
Returns a new DateTime representing the end of the day (23:59:59).
-
#future? ⇒ Boolean
Tells whether the DateTime object’s datetime lies in the future.
-
#past? ⇒ Boolean
Tells whether the DateTime object’s datetime lies in the past.
-
#seconds_since_midnight ⇒ Object
Seconds since midnight: DateTime.now.seconds_since_midnight.
-
#since(seconds) ⇒ Object
(also: #in)
Returns a new DateTime representing the time a number of seconds since the instance time Do not use this method in combination with x.months, use months_since instead!.
-
#utc ⇒ Object
(also: #getutc)
Adjusts DateTime to UTC by adding its offset value; offset is set to 0.
-
#utc? ⇒ Boolean
Returns true if offset == 0.
-
#utc_offset ⇒ Object
Returns the offset value in seconds.
Class Method Details
.included(base) ⇒ Object
:nodoc:
8 9 10 11 12 13 14 15 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 8 def self.included(base) #:nodoc: base.extend ClassMethods base.class_eval do alias_method :compare_without_coercion, :<=> alias_method :<=>, :compare_with_coercion end end |
Instance Method Details
#advance(options) ⇒ Object
Uses Date to provide precise Time calculations for years, months, and days. The options
parameter takes a hash with any of these keys: :years
, :months
, :weeks
, :days
, :hours
, :minutes
, :seconds
.
63 64 65 66 67 68 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 63 def advance() d = to_date.advance() datetime_advanced_by_date = change(:year => d.year, :month => d.month, :day => d.day) seconds_to_advance = ([:seconds] || 0) + ([:minutes] || 0) * 60 + ([:hours] || 0) * 3600 seconds_to_advance == 0 ? datetime_advanced_by_date : datetime_advanced_by_date.since(seconds_to_advance) end |
#ago(seconds) ⇒ Object
Returns a new DateTime representing the time a number of seconds ago Do not use this method in combination with x.months, use months_ago instead!
72 73 74 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 72 def ago(seconds) self.since(-seconds) end |
#beginning_of_day ⇒ Object Also known as: midnight, at_midnight, at_beginning_of_day
Returns a new DateTime representing the start of the day (0:00)
84 85 86 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 84 def beginning_of_day change(:hour => 0) end |
#change(options) ⇒ Object
Returns a new DateTime where one or more of the elements have been changed according to the options
parameter. The time options (hour, minute, sec) reset cascadingly, so if only the hour is passed, then minute and sec is set to 0. If the hour and minute is passed, then sec is set to 0.
46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 46 def change() ::DateTime.civil( [:year] || self.year, [:month] || self.month, [:day] || self.day, [:hour] || self.hour, [:min] || ([:hour] ? 0 : self.min), [:sec] || (([:hour] || [:min]) ? 0 : self.sec), [:offset] || self.offset, [:start] || self.start ) end |
#compare_with_coercion(other) ⇒ Object
Layers additional behavior on DateTime#<=> so that Time and ActiveSupport::TimeWithZone instances can be compared with a DateTime
118 119 120 121 122 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 118 def compare_with_coercion(other) other = other.comparable_time if other.respond_to?(:comparable_time) other = other.to_datetime unless other.acts_like?(:date) compare_without_coercion(other) end |
#end_of_day ⇒ Object
Returns a new DateTime representing the end of the day (23:59:59)
92 93 94 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 92 def end_of_day change(:hour => 23, :min => 59, :sec => 59) end |
#future? ⇒ Boolean
Tells whether the DateTime object’s datetime lies in the future
34 35 36 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 34 def future? self > ::DateTime.current end |
#past? ⇒ Boolean
Tells whether the DateTime object’s datetime lies in the past
29 30 31 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 29 def past? self < ::DateTime.current end |
#seconds_since_midnight ⇒ Object
Seconds since midnight: DateTime.now.seconds_since_midnight
39 40 41 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 39 def seconds_since_midnight self.sec + (self.min * 60) + (self.hour * 3600) end |
#since(seconds) ⇒ Object Also known as: in
Returns a new DateTime representing the time a number of seconds since the instance time Do not use this method in combination with x.months, use months_since instead!
78 79 80 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 78 def since(seconds) self + Rational(seconds.round, 86400) end |
#utc ⇒ Object Also known as: getutc
102 103 104 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 102 def utc new_offset(0) end |
#utc? ⇒ Boolean
Returns true if offset == 0
108 109 110 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 108 def utc? offset == 0 end |
#utc_offset ⇒ Object
Returns the offset value in seconds
113 114 115 |
# File 'lib/active_support/core_ext/date_time/calculations.rb', line 113 def utc_offset (offset * 86400).to_i end |