From 5799f9a0638c410078489d8fb335cb2ebcc8050d Mon Sep 17 00:00:00 2001 From: Charlie Somerville Date: Wed, 14 May 2014 16:32:07 +1000 Subject: [PATCH] convert DateTime to Time before quoting in database --- .../connection_adapters/abstract/quoting.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb b/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb index ad50b57241455..44e01b2e77766 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb @@ -61,6 +61,17 @@ def quoted_false end def quoted_date(value) + if value.is_a?(DateTime) + # hackily convert this DateTime to a Time so we can properly call + # `getlocal` on it to convert it to localtime. + # + # DateTime has a getutc method, but not a getlocal method, so the + # code below will just not even convert it before calling `to_s(:db)` + # unless we intervene. + # + value = Time.parse(value.to_s) + end + if value.acts_like?(:time) zone_conversion_method = ActiveRecord::Base.default_timezone == :utc ? :getutc : :getlocal value.respond_to?(zone_conversion_method) ? value.send(zone_conversion_method) : value