Module: DateAndTime::Calculations
- Defined in:
- activesupport/lib/active_support/core_ext/date_and_time/calculations.rb
Constant Summary collapse
- DAYS_INTO_WEEK =
{ :monday => 0, :tuesday => 1, :wednesday => 2, :thursday => 3, :friday => 4, :saturday => 5, :sunday => 6 }
Instance Method Summary collapse
-
#beginning_of_month ⇒ Object
(also: #at_beginning_of_month)
Returns a new date/time at the start of the month.
-
#beginning_of_quarter ⇒ Object
(also: #at_beginning_of_quarter)
Returns a new date/time at the start of the quarter.
-
#beginning_of_week(start_day = Date.beginning_of_week) ⇒ Object
(also: #at_beginning_of_week)
Returns a new date/time representing the start of this week on the given day.
-
#beginning_of_year ⇒ Object
(also: #at_beginning_of_year)
Return a new date/time at the beginning of the year.
-
#days_ago(days) ⇒ Object
Returns a new date/time the specified number of days ago.
-
#days_since(days) ⇒ Object
Returns a new date/time the specified number of days in the future.
-
#days_to_week_start(start_day = Date.beginning_of_week) ⇒ Object
Returns the number of days to the start of the week on the given day.
-
#end_of_month ⇒ Object
(also: #at_end_of_month)
Returns a new date/time representing the end of the month.
-
#end_of_quarter ⇒ Object
(also: #at_end_of_quarter)
Returns a new date/time at the end of the quarter.
-
#end_of_week(start_day = Date.beginning_of_week) ⇒ Object
(also: #at_end_of_week)
Returns a new date/time representing the end of this week on the given day.
-
#end_of_year ⇒ Object
(also: #at_end_of_year)
Returns a new date/time representing the end of the year.
-
#future? ⇒ Boolean
Returns true if the date/time is in the future.
-
#monday ⇒ Object
Returns Monday of this week assuming that week starts on Monday.
-
#months_ago(months) ⇒ Object
Returns a new date/time the specified number of months ago.
-
#months_since(months) ⇒ Object
Returns a new date/time the specified number of months in the future.
-
#next_month ⇒ Object
Short-hand for months_since(1).
-
#next_quarter ⇒ Object
Short-hand for months_since(3).
-
#next_week(given_day_in_next_week = Date.beginning_of_week) ⇒ Object
Returns a new date/time representing the given day in the next week.
-
#next_year ⇒ Object
Short-hand for years_since(1).
-
#past? ⇒ Boolean
Returns true if the date/time is in the past.
-
#prev_month ⇒ Object
(also: #last_month)
Short-hand for months_ago(1).
-
#prev_quarter ⇒ Object
(also: #last_quarter)
Short-hand for months_ago(3).
-
#prev_week(start_day = Date.beginning_of_week) ⇒ Object
(also: #last_week)
Returns a new date/time representing the given day in the previous week.
-
#prev_year ⇒ Object
(also: #last_year)
Short-hand for years_ago(1).
-
#sunday ⇒ Object
Returns Sunday of this week assuming that week starts on Monday.
-
#today? ⇒ Boolean
Returns true if the date/time is today.
-
#tomorrow ⇒ Object
Returns a new date/time representing tomorrow.
-
#weeks_ago(weeks) ⇒ Object
Returns a new date/time the specified number of weeks ago.
-
#weeks_since(weeks) ⇒ Object
Returns a new date/time the specified number of weeks in the future.
-
#years_ago(years) ⇒ Object
Returns a new date/time the specified number of years ago.
-
#years_since(years) ⇒ Object
Returns a new date/time the specified number of years in the future.
-
#yesterday ⇒ Object
Returns a new date/time representing yesterday.
Instance Method Details
#beginning_of_month ⇒ Object Also known as: at_beginning_of_month
Returns a new date/time at the start of the month. DateTime objects will have a time set to 0:00.
80 81 82 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 80 def beginning_of_month first_hour{ change(:day => 1) } end |
#beginning_of_quarter ⇒ Object Also known as: at_beginning_of_quarter
Returns a new date/time at the start of the quarter. Example: 1st January, 1st July, 1st October. DateTime objects will have a time set to 0:00.
88 89 90 91 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 88 def beginning_of_quarter first_quarter_month = [10, 7, 4, 1].detect { |m| m <= month } beginning_of_month.change(:month => first_quarter_month) end |
#beginning_of_week(start_day = Date.beginning_of_week) ⇒ Object Also known as: at_beginning_of_week
Returns a new date/time representing the start of this week on the given day. Week is assumed to start on start_day
, default is Date.beginning_of_week
or config.beginning_of_week
when set. DateTime
objects have their time set to 0:00.
174 175 176 177 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 174 def beginning_of_week(start_day = Date.beginning_of_week) result = days_ago(days_to_week_start(start_day)) acts_like?(:time) ? result.midnight : result end |
#beginning_of_year ⇒ Object Also known as: at_beginning_of_year
Return a new date/time at the beginning of the year. Example: 1st January. DateTime objects will have a time set to 0:00.
106 107 108 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 106 def beginning_of_year change(:month => 1).beginning_of_month end |
#days_ago(days) ⇒ Object
Returns a new date/time the specified number of days ago.
39 40 41 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 39 def days_ago(days) advance(:days => -days) end |
#days_since(days) ⇒ Object
Returns a new date/time the specified number of days in the future.
44 45 46 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 44 def days_since(days) advance(:days => days) end |
#days_to_week_start(start_day = Date.beginning_of_week) ⇒ Object
Returns the number of days to the start of the week on the given day. Week is assumed to start on start_day
, default is Date.beginning_of_week
or config.beginning_of_week
when set.
164 165 166 167 168 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 164 def days_to_week_start(start_day = Date.beginning_of_week) start_day_number = DAYS_INTO_WEEK[start_day] current_day_number = wday != 0 ? wday - 1 : 6 (current_day_number - start_day_number) % 7 end |
#end_of_month ⇒ Object Also known as: at_end_of_month
Returns a new date/time representing the end of the month. DateTime objects will have a time set to 23:59:59.
203 204 205 206 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 203 def end_of_month last_day = ::Time.days_in_month(month, year) last_hour{ days_since(last_day - day) } end |
#end_of_quarter ⇒ Object Also known as: at_end_of_quarter
Returns a new date/time at the end of the quarter. Example: 31st March, 30th June, 30th September. DateTime objects will have a time set to 23:59:59.
97 98 99 100 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 97 def end_of_quarter last_quarter_month = [3, 6, 9, 12].detect { |m| m >= month } beginning_of_month.change(:month => last_quarter_month).end_of_month end |
#end_of_week(start_day = Date.beginning_of_week) ⇒ Object Also known as: at_end_of_week
Returns a new date/time representing the end of this week on the given day. Week is assumed to start on start_day
, default is Date.beginning_of_week
or config.beginning_of_week
when set. DateTime objects have their time set to 23:59:59.
190 191 192 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 190 def end_of_week(start_day = Date.beginning_of_week) last_hour{ days_since(6 - days_to_week_start(start_day)) } end |
#end_of_year ⇒ Object Also known as: at_end_of_year
Returns a new date/time representing the end of the year. DateTime objects will have a time set to 23:59:59.
211 212 213 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 211 def end_of_year change(:month => 12).end_of_month end |
#future? ⇒ Boolean
Returns true if the date/time is in the future.
34 35 36 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 34 def future? self > self.class.current end |
#monday ⇒ Object
Returns Monday of this week assuming that week starts on Monday. DateTime
objects have their time set to 0:00.
182 183 184 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 182 def monday beginning_of_week(:monday) end |
#months_ago(months) ⇒ Object
Returns a new date/time the specified number of months ago.
59 60 61 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 59 def months_ago(months) advance(:months => -months) end |
#months_since(months) ⇒ Object
Returns a new date/time the specified number of months in the future.
64 65 66 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 64 def months_since(months) advance(:months => months) end |
#next_month ⇒ Object
Short-hand for months_since(1).
120 121 122 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 120 def next_month months_since(1) end |
#next_quarter ⇒ Object
Short-hand for months_since(3)
125 126 127 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 125 def next_quarter months_since(3) end |
#next_week(given_day_in_next_week = Date.beginning_of_week) ⇒ Object
Returns a new date/time representing the given day in the next week. The given_day_in_next_week
defaults to the beginning of the week which is determined by Date.beginning_of_week
or config.beginning_of_week
when set. DateTime
objects have their time set to 0:00.
115 116 117 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 115 def next_week(given_day_in_next_week = Date.beginning_of_week) first_hour{ weeks_since(1).beginning_of_week.days_since(days_span(given_day_in_next_week)) } end |
#next_year ⇒ Object
Short-hand for years_since(1).
130 131 132 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 130 def next_year years_since(1) end |
#past? ⇒ Boolean
Returns true if the date/time is in the past.
29 30 31 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 29 def past? self < self.class.current end |
#prev_month ⇒ Object Also known as: last_month
Short-hand for months_ago(1).
144 145 146 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 144 def prev_month months_ago(1) end |
#prev_quarter ⇒ Object Also known as: last_quarter
Short-hand for months_ago(3).
150 151 152 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 150 def prev_quarter months_ago(3) end |
#prev_week(start_day = Date.beginning_of_week) ⇒ Object Also known as: last_week
Returns a new date/time representing the given day in the previous week. Week is assumed to start on start_day
, default is Date.beginning_of_week
or config.beginning_of_week
when set. DateTime objects have their time set to 0:00.
138 139 140 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 138 def prev_week(start_day = Date.beginning_of_week) first_hour{ weeks_ago(1).beginning_of_week.days_since(days_span(start_day)) } end |
#prev_year ⇒ Object Also known as: last_year
Short-hand for years_ago(1).
156 157 158 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 156 def prev_year years_ago(1) end |
#sunday ⇒ Object
Returns Sunday of this week assuming that week starts on Monday. DateTime
objects have their time set to 23:59:59.
197 198 199 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 197 def sunday end_of_week(:monday) end |
#today? ⇒ Boolean
Returns true if the date/time is today.
24 25 26 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 24 def today? to_date == ::Date.current end |
#tomorrow ⇒ Object
Returns a new date/time representing tomorrow.
19 20 21 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 19 def tomorrow advance(:days => 1) end |
#weeks_ago(weeks) ⇒ Object
Returns a new date/time the specified number of weeks ago.
49 50 51 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 49 def weeks_ago(weeks) advance(:weeks => -weeks) end |
#weeks_since(weeks) ⇒ Object
Returns a new date/time the specified number of weeks in the future.
54 55 56 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 54 def weeks_since(weeks) advance(:weeks => weeks) end |
#years_ago(years) ⇒ Object
Returns a new date/time the specified number of years ago.
69 70 71 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 69 def years_ago(years) advance(:years => -years) end |
#years_since(years) ⇒ Object
Returns a new date/time the specified number of years in the future.
74 75 76 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 74 def years_since(years) advance(:years => years) end |
#yesterday ⇒ Object
Returns a new date/time representing yesterday.
14 15 16 |
# File 'activesupport/lib/active_support/core_ext/date_and_time/calculations.rb', line 14 def yesterday advance(:days => -1) end |