diff options
author | Matthew Draper <matthew@trebex.net> | 2014-05-28 03:32:21 +0930 |
---|---|---|
committer | Matthew Draper <matthew@trebex.net> | 2014-05-28 03:32:21 +0930 |
commit | 086ee1cc1312d4679e32b6dc8e343548891af4fa (patch) | |
tree | 1d668a10823da293120e9a0200cfaf9b1b390493 /activesupport/lib/active_support/core_ext/date_time | |
parent | 6f9aff75a5e8cdfb92e425e433807ac2972df740 (diff) | |
parent | 0fb33f3fda3958865fb62969ea6898acf7016aaf (diff) | |
download | rails-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.rb | 12 |
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 |