From a5b362df567ed4a0167a83e9b8f00b9f614ac38b Mon Sep 17 00:00:00 2001 From: Xavier Noria Date: Fri, 25 Nov 2011 12:01:58 -0800 Subject: some tweaks to PR#3547. [Closes #3547] --- .../lib/active_support/core_ext/date/calculations.rb | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'activesupport/lib/active_support') diff --git a/activesupport/lib/active_support/core_ext/date/calculations.rb b/activesupport/lib/active_support/core_ext/date/calculations.rb index ea9a1c2c0d..0c4081aa8d 100644 --- a/activesupport/lib/active_support/core_ext/date/calculations.rb +++ b/activesupport/lib/active_support/core_ext/date/calculations.rb @@ -174,24 +174,28 @@ class Date months_since(1) end unless method_defined?(:next_month) - # Returns number of days to start of this week, week starts on start_day (default is :monday). + # Returns number of days to start of this week. Week is assumed to start on + # +start_day+, default is +:monday+. def days_to_week_start(start_day = :monday) start_day_number = DAYS_INTO_WEEK[start_day] current_day_number = wday != 0 ? wday - 1 : 6 - days_span = current_day_number - start_day_number - days_span >= 0 ? days_span : 7 + days_span + (current_day_number - start_day_number) % 7 end - # Returns a new Date/DateTime representing the "start" of this week, week starts on start_day (default is :monday, i.e. Monday; DateTime objects will have time set to 0:00). + # Returns a new +Date+/+DateTime+ representing the start of this week. Week is + # assumed to start on +start_day+, default is +:monday+. +DateTime+ objects + # have their time set to 0:00. def beginning_of_week(start_day = :monday) days_to_start = days_to_week_start(start_day) result = self - days_to_start - self.acts_like?(:time) ? result.midnight : result + acts_like?(:time) ? result.midnight : result end alias :monday :beginning_of_week alias :at_beginning_of_week :beginning_of_week - # Returns a new Date/DateTime representing the end of this week, week starts on start_day (default is :monday, i.e. Sunday, DateTime objects will have time set to 23:59:59). + # Returns a new +Date+/+DateTime+ representing the end of this week, week + # starts on +start_day+, default is +:monday+. +DateTime+ objects have their + # time set to 23:59:59). def end_of_week(start_day = :monday) days_to_end = 6 - days_to_week_start(start_day) result = self + days_to_end.days @@ -200,7 +204,8 @@ class Date alias :sunday :end_of_week alias :at_end_of_week :end_of_week - # Returns a new Date/DateTime representing the start of the given day in the previous week (default is :monday). + # Returns a new +Date+/+DateTime+ representing the given +day+ in the previous + # week. Default is +:monday+. +DateTime+ objects have their time set to 0:00. def prev_week(day = :monday) result = (self - 7).beginning_of_week + DAYS_INTO_WEEK[day] self.acts_like?(:time) ? result.change(:hour => 0) : result -- cgit v1.2.3