From df57f53d09575f8bc6542f87a3384240b66f9b4b Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Mon, 5 Mar 2007 08:34:42 +0000 Subject: Time#since overflows to DateTime. Introduce Time#to_datetime. Closes #7715. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6335 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activesupport/lib/active_support/core_ext/date_time/conversions.rb | 5 +++++ activesupport/lib/active_support/core_ext/time/calculations.rb | 2 ++ activesupport/lib/active_support/core_ext/time/conversions.rb | 5 +++++ 3 files changed, 12 insertions(+) (limited to 'activesupport/lib/active_support/core_ext') diff --git a/activesupport/lib/active_support/core_ext/date_time/conversions.rb b/activesupport/lib/active_support/core_ext/date_time/conversions.rb index 48a13e1fde..926a168cec 100644 --- a/activesupport/lib/active_support/core_ext/date_time/conversions.rb +++ b/activesupport/lib/active_support/core_ext/date_time/conversions.rb @@ -22,6 +22,11 @@ module ActiveSupport #:nodoc: def to_date ::Date.new(year, month, day) end + + # To be able to keep Times and DateTimes interchangeable on conversions + def to_datetime + self + end end end end diff --git a/activesupport/lib/active_support/core_ext/time/calculations.rb b/activesupport/lib/active_support/core_ext/time/calculations.rb index 1c2daf0606..1fdfbcdf45 100644 --- a/activesupport/lib/active_support/core_ext/time/calculations.rb +++ b/activesupport/lib/active_support/core_ext/time/calculations.rb @@ -91,6 +91,8 @@ module ActiveSupport #:nodoc: f = seconds.since(self) final_dst = f.dst? ? 1 : 0 (seconds.abs >= 86400 && initial_dst != final_dst) ? f + (initial_dst - final_dst).hours : f + rescue + self.to_datetime.since(seconds) end alias :in :since diff --git a/activesupport/lib/active_support/core_ext/time/conversions.rb b/activesupport/lib/active_support/core_ext/time/conversions.rb index f2ff0e06a8..903dd02031 100644 --- a/activesupport/lib/active_support/core_ext/time/conversions.rb +++ b/activesupport/lib/active_support/core_ext/time/conversions.rb @@ -28,6 +28,11 @@ module ActiveSupport #:nodoc: def to_time self end + + # converts to a Ruby DateTime instance; preserves utc offset + def to_datetime + ::DateTime.civil(year, month, day, hour, min, sec, Rational(utc_offset, 86400), 0) + end end end end -- cgit v1.2.3