From: Rick DeNatale Date: 2007-03-16T04:28:16+09:00 Subject: Re: Calculating the age given DOB I think that this does the right thing: rick@frodo:/public/rubyscripts$ cat datemath.rb #!/usr/math/bin/ruby require 'date' class Date # return the number of days since the beginning of the year def years_since(date) # The parens in the expression below aren't strictly necessary, but # I think it makes what's going on a little bit clearer. first, last = *(self >= date ? [date, self] : [self, date]) (self <=> date) * ((last.year - first.year) - (first.yday > last.yday ? 1 : 0)) end end def tryit(d1,d2) puts "There are #{d1.years_since(d2)} years between #{d2} and #{d1}" end tryit(Date.new(2007,3,15), Date.new(2000,3,14)) tryit(Date.new(2000,3,14), Date.new(2007,3,15)) tryit(Date.new(2007,3,15), Date.new(2000,3,15)) tryit(Date.new(2007,3,15), Date.new(2000,3,16)) tryit(Date.new(2000,3,16), Date.new(2007,3,15)) tryit(Date.new(2007,2,27), Date.new(2000,2,29)) tryit(Date.new(2000,2,29), Date.new(2000,2,27)) tryit(Date.new(2007,2,28), Date.new(2000,2,29)) tryit(Date.new(2000,2,29), Date.new(2007,2,28)) tryit(Date.new(2000,2,29), Date.new(2007,3,1)) tryit(Date.new(2007,3,1), Date.new(2000,2,29)) tryit(Date.new(2007,3,2), Date.new(2000,2,29)) tryit(Date.new(2000,2,29), Date.new(2007,3,2)) rick@frodo:/public/rubyscripts$ ruby datemath.rb There are 7 years between 2000-03-14 and 2007-03-15 There are -7 years between 2007-03-15 and 2000-03-14 There are 6 years between 2000-03-15 and 2007-03-15 There are 6 years between 2000-03-16 and 2007-03-15 There are -6 years between 2007-03-15 and 2000-03-16 There are 6 years between 2000-02-29 and 2007-02-27 There are 0 years between 2000-02-27 and 2000-02-29 There are 6 years between 2000-02-29 and 2007-02-28 There are -6 years between 2007-02-28 and 2000-02-29 There are -7 years between 2007-03-01 and 2000-02-29 There are 7 years between 2000-02-29 and 2007-03-01 There are 7 years between 2000-02-29 and 2007-03-02 There are -7 years between 2007-03-02 and 2000-02-29 -- Rick DeNatale My blog on Ruby http://talklikeaduck.denhaven2.com/