私の個人ブログに掲載したら好評でしたので、こちらでもご紹介してみます。

最近知ったんですが、生年月日から年齢を計算する簡単な計算式というのがあるそうです。

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

PHPで書くと

echo (int)((20070823 - 19850101)/10000);

Perlで書くと

print int ((20070823 - 19850101)/10000);

JAVAで書くと

System.out.println( (int)((20070823 - 19850101)/10000) );

という感じになります。

日本の法律を確認してみました。誕生日の前日が終了する瞬間(すなわち誕生日をむかえる午前0時00分の直前)に1歳を加えることになる。ただしうるう年など、年によって期間を定めた場合において最後の月に応当する日がないときは、その月の末日をもってその年齢が満了する、ということになるようです。もし私が今回ご紹介した計算式を知らなかったら、まず現在の年から生まれた年を引いてからその後日付チェックをして前後で年の差し引きをし、さらにうるう年などの処理を加えて完成、としてしまうところです。

この計算式、以前第二種情報処理技術者試験でも出題されたと聞きました。有名な計算式なのでしょうか?アルゴリズムって芸術ですね。

※追記(2007/8/29)

読者の方から「生年月日から年齢を計算する簡単な計算式」はこの式はこのままで使えるとは限らないというご指摘をいただきましたので追記させていただきます。

「誕生日の前日が終了する瞬間(すなわち誕生日をむかえる午前0時00分の直前)に1歳を加えることになる」の部分の解釈には前日に1日加えると解釈される場合と当日に1日加えると解釈される場合の2種類があるようです。特に自治体においては前者で解釈される場合が多いとのことです。大変重要なご指摘でしたので追記させていただきました。

なおこの件についてご指摘いただいた方ご本人のブログ上で詳細説明していただいておりますのでURLをご紹介させていただきたいと思います(リンクの許可を得ています)。
http://d.hatena.ne.jp/alittlething/20070827/p1