べるべる研究日誌

なんでもやる系エンジニアの日々

生年月日から年齢を計算

昔どこかで見た事がある気がするけど生年月日から年齢を計算する簡単な方法。

(今日の日付-誕生日)/10000の小数点以下切捨て。

佐野裕のサーバ管理者日記 - 生年月日から年齢を計算する簡単な計算式:ITpro

日付を差し引きしてその秒数とか日数を出して365で割る...とかするとうるう年を考慮していないので見事にずれるのだ(経験済み)。月日をIntで引き算すると過ぎていれば+でそのまま、過ぎて無いならーの値になるので最上位の年が繰り下がると。

ということで、せっかくなのでRubyでDateクラスに追加する形で書いてみた。Timeでも同じでいいみたい。でも、どちらかというとActiveSupportとかに追加した方が使えるのかも。

class Date
  def age(calcDay = Time.now)
    (calcDay.strftime("%Y%m%d").to_i-self.strftime("%Y%m%d").to_i)/10000
  end
end

bd = Date::new(1974,5,5)
p bd.age()	# 33
p bd.age(Date::new(1984,5,5)) #10
p bd.age(Date::new(1984,5,4)) #9