aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/date_time
diff options
context:
space:
mode:
authorMatthew Draper <matthew@trebex.net>2014-05-28 03:32:21 +0930
committerMatthew Draper <matthew@trebex.net>2014-05-28 03:32:21 +0930
commit086ee1cc1312d4679e32b6dc8e343548891af4fa (patch)
tree1d668a10823da293120e9a0200cfaf9b1b390493 /activesupport/lib/active_support/core_ext/date_time
parent6f9aff75a5e8cdfb92e425e433807ac2972df740 (diff)
parent0fb33f3fda3958865fb62969ea6898acf7016aaf (diff)
downloadrails-086ee1cc1312d4679e32b6dc8e343548891af4fa.tar.gz
rails-086ee1cc1312d4679e32b6dc8e343548891af4fa.tar.bz2
rails-086ee1cc1312d4679e32b6dc8e343548891af4fa.zip
Merge pull request #12080 from ShayDavidson/fix_datetime_partial_dates
Added partial days support to `DateTime`'s `advance` method.
Diffstat (limited to 'activesupport/lib/active_support/core_ext/date_time')
-rw-r--r--activesupport/lib/active_support/core_ext/date_time/calculations.rb12
1 files changed, 11 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/core_ext/date_time/calculations.rb b/activesupport/lib/active_support/core_ext/date_time/calculations.rb
index 73ad0aa097..289ca12b5e 100644
--- a/activesupport/lib/active_support/core_ext/date_time/calculations.rb
+++ b/activesupport/lib/active_support/core_ext/date_time/calculations.rb
@@ -53,6 +53,16 @@ class DateTime
# <tt>:months</tt>, <tt>:weeks</tt>, <tt>:days</tt>, <tt>:hours</tt>,
# <tt>:minutes</tt>, <tt>:seconds</tt>.
def advance(options)
+ unless options[:weeks].nil?
+ options[:weeks], partial_weeks = options[:weeks].divmod(1)
+ options[:days] = options.fetch(:days, 0) + 7 * partial_weeks
+ end
+
+ unless options[:days].nil?
+ options[:days], partial_days = options[:days].divmod(1)
+ options[:hours] = options.fetch(:hours, 0) + 24 * partial_days
+ end
+
d = to_date.advance(options)
datetime_advanced_by_date = change(:year => d.year, :month => d.month, :day => d.day)
seconds_to_advance = \
@@ -63,7 +73,7 @@ class DateTime
if seconds_to_advance.zero?
datetime_advanced_by_date
else
- datetime_advanced_by_date.since seconds_to_advance
+ datetime_advanced_by_date.since(seconds_to_advance)
end
end