 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Doing Date Arithmetic | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'date' y2k = Time.gm(2000, 1, 1) | Sat Jan 01 00:00:00 UTC 2000 | Sat Jan 01 00:00:00 UTC 2000 | 
| y2k + 1 | Sat Jan 01 00:00:01 UTC 2000 | Sat Jan 01 00:00:01 UTC 2000 | 
| y2k - 1 | Fri Dec 31 23:59:59 UTC 1999 | Fri Dec 31 23:59:59 UTC 1999 | 
| y2k + (60 * 60 * 24 * 365) | Sun Dec 31 00:00:00 UTC 2000 | Sun Dec 31 00:00:00 UTC 2000 | 
| y2k_dt = DateTime.new(2000, 1, 1) (y2k_dt + 1).to_s | "2000-01-02T00:00:00Z" | "2000-01-02T00:00:00Z" | 
| (y2k_dt - 1).to_s | "1999-12-31T00:00:00Z" | "1999-12-31T00:00:00Z" | 
| (y2k_dt + 0.5).to_s | "2000-01-01T12:00:00Z" | "2000-01-01T12:00:00Z" | 
| (y2k_dt + 365).to_s | "2000-12-31T00:00:00Z" | "2000-12-31T00:00:00Z" | 
| day_one = Time.gm(1999, 12, 31) day_two = Time.gm(2000, 1, 1) day_two - day_one | 86400.0 | 86400.0 | 
| day_one - day_two | -86400.0 | -86400.0 | 
| day_one = DateTime.new(1999, 12, 31) day_two = DateTime.new(2000, 1, 1) day_two - day_one | Rational(1, 1) | Rational(1, 1) | 
| day_one - day_two | Rational(-1, 1) | Rational(-1, 1) | 
| before_time = Time.now before_datetime = DateTime.now sleep(10) Time.now - before_time | 10.003414 | 10.004279 | 
| DateTime.now - before_datetime | Rational(5001557, 43200000000) | Rational(18527, 160000000) | 
| require 'rubygems' require 'active_support' 10.days.ago | Wed Mar 08 19:54:17 EST 2006 | Tue Apr 04 17:32:20 EDT 2006 | 
| 1.month.from_now | Mon Apr 17 20:54:17 EDT 2006 | Sun May 14 17:32:20 EDT 2006 | 
| 2.weeks.since(Time.local(2006, 1, 1)) | Sun Jan 15 00:00:00 EST 2006 | Sun Jan 15 00:00:00 EST 2006 | 
| y2k - 1.day | Fri Dec 31 00:00:00 UTC 1999 | Fri Dec 31 00:00:00 UTC 1999 | 
| y2k + 6.3.years | Thu Apr 20 01:48:00 UTC 2006 | Thu Apr 20 01:48:00 UTC 2006 | 
| 6.3.years.since y2k | Thu Apr 20 01:48:00 UTC 2006 | Thu Apr 20 01:48:00 UTC 2006 | 
| (y2k_dt >> 1).to_s | "2000-02-01T00:00:00Z" | "2000-02-01T00:00:00Z" | 
| (y2k_dt << 1).to_s | "1999-12-01T00:00:00Z" | "1999-12-01T00:00:00Z" | 
| y2k + 1.month | Mon Jan 31 00:00:00 UTC 2000 | Mon Jan 31 00:00:00 UTC 2000 | 
| y2k - 1.month | Thu Dec 02 00:00:00 UTC 1999 | Thu Dec 02 00:00:00 UTC 1999 | 
| halloween = Date.new(2000, 10, 31) (halloween << 1).to_s | "2000-09-30" | "2000-09-30" | 
| (halloween >> 1).to_s | "2000-11-30" | "2000-11-30" | 
| (halloween >> 2).to_s | "2000-12-31" | "2000-12-31" | 
| leap_year_day = Date.new(1996, 2, 29) (leap_year_day << 1).to_s | "1996-01-29" | "1996-01-29" | 
| (leap_year_day >> 1).to_s | "1996-03-29" | "1996-03-29" | 
| (leap_year_day >> 12).to_s | "1997-02-28" | "1997-02-28" | 
| (leap_year_day << 12 * 4).to_s | "1992-02-29" | "1992-02-29" |