age

こんなんでええんかいな?

require 'date'

class Human
   def initialize(birthday)
      @birthday = birthday
   end
  
   def age
      today = Date.today
      birthday_in_this_year = Date.new(today.year, @birthday.month, @birthday.day)
    
      today.year - @birthday.year - ((birthday_in_this_year > today) ? 1 : 0)
   end
end

Human.new(Date.new(2005,8,22)).age #=> 1
Human.new(Date.new(2005,8,23)).age #=> 1
Human.new(Date.new(2005,8,24)).age #=> 0
Human.new(Date.new(2005,8,25)).age #=> 0

うーむ。


昔、全然別のを書いたような気がするんだが。足して100で割るとか、そんな感じの凄く単純なヤツ。はんばあぐさんとこで見たような。


こうか?

require 'date'

class Human
   def age
      today = Date.today
      tn = today.year * 10000 + today.month * 100 + today.day
      bn = @birthday.year * 10000 + @birthday.month + @birthday.day

      (tn - bn) / 10000
   end
end

Human.new(Date.new(2005,8,22)).age #=> 1
Human.new(Date.new(2005,8,23)).age #=> 1
Human.new(Date.new(2005,8,24)).age #=> 1
Human.new(Date.new(2005,8,25)).age #=> 1

Human.new(Date.new(1976,10,10)).age #=> 30

あれ? これは今年何歳になるかだっけ?