未验证 提交 c1ad19c9 编写于 作者: J Jeremy Daer

Revert "Change 1.week to create 1 week durations instead of 7 days durations."

Regression: adding minutes/hours to a time would change its time zone

This reverts commit 1bf9fe75.
上级 abff83e6
......@@ -112,26 +112,6 @@
*Santosh Wadghule*
* `ActiveSupport::Duration` supports weeks and hours.
[1.hour.inspect, 1.hour.value, 1.hour.parts]
# => ["3600 seconds", 3600, [[:seconds, 3600]]] # Before
# => ["1 hour", 3600, [[:hours, 1]]] # After
[1.week.inspect, 1.week.value, 1.week.parts]
# => ["7 days", 604800, [[:days, 7]]] # Before
# => ["1 week", 604800, [[:weeks, 1]]] # After
This brings us into closer conformance with ISO8601 and relieves some
astonishment about getting `1.hour.inspect # => 3600 seconds`.
Compatibility: The duration's `value` remains the same, so apps using
durations are oblivious to the new time periods. Apps, libraries, and
plugins that work with the internal `parts` hash will need to broaden
their time period handling to cover hours & weeks.
*Andrey Novikov*
* Fix behavior of JSON encoding for `Exception`.
*namusyaka*
......
......@@ -25,17 +25,17 @@ def seconds
# Returns a Duration instance matching the number of minutes provided.
#
# 2.minutes # => 2 minutes
# 2.minutes # => 120 seconds
def minutes
ActiveSupport::Duration.new(self * 60, [[:minutes, self]])
ActiveSupport::Duration.new(self * 60, [[:seconds, self * 60]])
end
alias :minute :minutes
# Returns a Duration instance matching the number of hours provided.
#
# 2.hours # => 2 hours
# 2.hours # => 7_200 seconds
def hours
ActiveSupport::Duration.new(self * 3600, [[:hours, self]])
ActiveSupport::Duration.new(self * 3600, [[:seconds, self * 3600]])
end
alias :hour :hours
......@@ -49,17 +49,17 @@ def days
# Returns a Duration instance matching the number of weeks provided.
#
# 2.weeks # => 2 weeks
# 2.weeks # => 14 days
def weeks
ActiveSupport::Duration.new(self * 7.days, [[:weeks, self]])
ActiveSupport::Duration.new(self * 7.days, [[:days, self * 7]])
end
alias :week :weeks
# Returns a Duration instance matching the number of fortnights provided.
#
# 2.fortnights # => 4 weeks
# 2.fortnights # => 28 days
def fortnights
ActiveSupport::Duration.new(self * 2.weeks, [[:weeks, self * 2]])
ActiveSupport::Duration.new(self * 2.weeks, [[:days, self * 14]])
end
alias :fortnight :fortnights
......
......@@ -120,7 +120,7 @@ def ago(time = ::Time.current)
def inspect #:nodoc:
parts.
reduce(::Hash.new(0)) { |h,(l,r)| h[l] += r; h }.
sort_by {|unit, _ | [:years, :months, :weeks, :days, :hours, :minutes, :seconds].index(unit)}.
sort_by {|unit, _ | [:years, :months, :days, :minutes, :seconds].index(unit)}.
map {|unit, val| "#{val} #{val == 1 ? unit.to_s.chop : unit.to_s}"}.
to_sentence(locale: ::I18n.default_locale)
end
......@@ -159,8 +159,6 @@ def sum(sign, time = ::Time.current) #:nodoc:
if t.acts_like?(:time) || t.acts_like?(:date)
if type == :seconds
t.since(sign * number)
elsif [:hours, :minutes].include?(type)
t.in_time_zone.advance(type => sign * number)
else
t.advance(type => sign * number)
end
......
......@@ -66,9 +66,8 @@ def test_inspect
assert_equal '10 years, 2 months, and 1 day', (10.years + 2.months + 1.day).inspect
assert_equal '10 years, 2 months, and 1 day', (10.years + 1.month + 1.day + 1.month).inspect
assert_equal '10 years, 2 months, and 1 day', (1.day + 10.years + 2.months).inspect
assert_equal '7 days', 7.days.inspect
assert_equal '1 week', 1.week.inspect
assert_equal '2 weeks', 1.fortnight.inspect
assert_equal '7 days', 1.week.inspect
assert_equal '14 days', 1.fortnight.inspect
end
def test_inspect_locale
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册