Permalink
Browse files

Match `String#to_time`'s behaviour to ruby

Previously `String#to_time` returned the midnight of the current date
in some cases where there was no relavant information in the string.
Now the method returns `nil` instead in those cases.

Fixes #22958.
  • Loading branch information...
Siim Liiser authored and pixeltrix committed Jan 13, 2016
1 parent 0807312 commit 9c2c677d903bcdea3feb1cad6c6d4c8c07cc8034
@@ -1,3 +1,12 @@
* Match `String#to_time`'s behaviour to that of ruby's implementation for edge cases.
`nil` is now returned instead of the current date if the string provided does
contain time information, but none that is used to build the `Time` object.
Fixes #22958.
*Siim Liiser*
* Rely on the native DateTime#<=> implementation to handle non-datetime like
objects instead of returning `nil` ourselves. This restores the ability
of `DateTime` instances to be compared with a `Numeric` that represents an
@@ -57,6 +66,7 @@
*Jon Moss*
## Rails 5.0.0.beta2 (February 01, 2016) ##
* Change `number_to_currency` behavior for checking negativity.
@@ -94,6 +104,7 @@
*Akshay Vishnoi*
## Rails 5.0.0.beta1 (December 18, 2015) ##
* Add thread_m/cattr_accessor/reader/writer suite of methods for declaring class and module variables that live per-thread.
@@ -18,7 +18,8 @@ class String
# "12/13/2012".to_time # => ArgumentError: argument out of range
def to_time(form = :local)
parts = Date._parse(self, false)
return if parts.empty?
used_keys = %i(year mon mday hour min sec sec_fraction offset)
return if (parts.keys & used_keys).empty?
now = Time.now
time = Time.new(
@@ -456,6 +456,7 @@ def test_string_to_time
assert_equal Time.local(2011, 2, 27, 17, 50), "2011-02-27 13:50 -0100".to_time
assert_equal Time.utc(2011, 2, 27, 23, 50), "2011-02-27 22:50 -0100".to_time(:utc)
assert_equal Time.local(2005, 2, 27, 22, 50), "2005-02-27 14:50 -0500".to_time
assert_nil "010".to_time
assert_nil "".to_time
end
end

0 comments on commit 9c2c677

Please sign in to comment.