Permalink
Browse files

some tweaks to PR#3547. [Closes #3547]

  • Loading branch information...
1 parent 7a33a00 commit a5b362df567ed4a0167a83e9b8f00b9f614ac38b @fxn fxn committed Nov 25, 2011
@@ -1,5 +1,8 @@
## Rails 3.2.0 (unreleased) ##
+* (Date|DateTime|Time)#beginning_of_week accept an optional argument to
+ be able to set the day at which weeks are assumed to start.
+
* Deprecated ActiveSupport::MessageEncryptor#encrypt and decrypt. *José Valim*
* ActiveSupport::Notifications.subscribed provides subscriptions to events while a block runs. *fxn*
@@ -174,24 +174,28 @@ def next_month
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 @@ def end_of_week(start_day = :monday)
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
@@ -3039,7 +3039,9 @@ Active Support defines these methods as well for Ruby 1.8.
h6. +beginning_of_week+, +end_of_week+
-The methods +beginning_of_week+ and +end_of_week+ receive a symbol with a day name in English (in lowercase, default is :monday) and return the dates for the beginning and end of week, assuming weeks start on day, passed as parameter:
+The methods +beginning_of_week+ and +end_of_week+ return the dates for the
+beginning and end of the week, respectively. Weeks are assumed to start on
+Monday, but that can be changed passing an argument, see examples:
<ruby>
d = Date.new(2010, 5, 8) # => Sat, 08 May 2010

0 comments on commit a5b362d

Please sign in to comment.