From 5d94fb33c6b862c6b206c55f0d19e3f307fa4056 Mon Sep 17 00:00:00 2001
From: David Heinemeier Hansson <david@loudthinking.com>
Date: Thu, 24 Feb 2005 00:07:01 +0000
Subject: Added year-based time calculations

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@779 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
---
 .../active_support/core_ext/time/calculations.rb   | 29 +++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

(limited to 'activesupport/lib')

diff --git a/activesupport/lib/active_support/core_ext/time/calculations.rb b/activesupport/lib/active_support/core_ext/time/calculations.rb
index 6744930756..acc84017ab 100644
--- a/activesupport/lib/active_support/core_ext/time/calculations.rb
+++ b/activesupport/lib/active_support/core_ext/time/calculations.rb
@@ -54,6 +54,26 @@ module ActiveSupport #:nodoc:
           end
         end
 
+        # Returns a new Time representing the time a number of specified years ago
+        def years_ago(years)
+          change(:year => self.year - years)
+        end
+        
+        def years_since(years)
+          change(:year => self.year + years)
+        end
+
+        # Short-hand for months_ago(1)
+        def last_year
+          years_since(1)
+        end
+        
+        # Short-hand for months_since(1)
+        def next_year
+          years_since(1)
+        end
+
+
         # Short-hand for months_ago(1)
         def last_month
           months_ago(1)
@@ -87,10 +107,17 @@ module ActiveSupport #:nodoc:
         
         # Returns a new Time representing the start of the month (1st of the month, 0:00)
         def beginning_of_month
-          self - ((self.mday-1).days + self.seconds_since_midnight)
+          #self - ((self.mday-1).days + self.seconds_since_midnight)
+          change(:mday => 1,:hour => 0, :min => 0, :sec => 0, :usec => 0)
         end
         alias :at_beginning_of_month :beginning_of_month
         
+        # Returns  a new Time representing the start of the year (1st of january, 0:00)
+        def beginning_of_year
+          change(:month => 1,:mday => 1,:hour => 0, :min => 0, :sec => 0, :usec => 0)
+        end
+        alias :at_beginning_of_year :beginning_of_year
+        
         # Convenience method which returns a new Time representing the time 1 day ago
         def yesterday
           self.ago(1.day)
-- 
cgit v1.2.3