PR

生年月日から年齢を計算する美しいコード

PHPで日付計算、DateTime::diff などを実行しようと思ったら、どうもできない。 phpversion() してみたら、PHP5.2.13でした。 マニュアルによれば DateTime::diff は 5.3 からなんだそうで・・・orz

それはそれで諦めて、何かできることはないのかなーと思っていたところで、こちらもよくある計算、「年齢計算」が目についた。さらに調査すると美しいコードを見た。

スポンサードリンク

(今日の日付-誕生日)/10000の小数点以下切捨て
※法令による年齢計算の重要な事柄を知っていて、さらにいくつかの言語のコードも提示している。

return (int)((20100610 - 19800610)/10000); //php

前日は-1、当日は+0で正しく計算出来ている。(上記例で言えば)年齢は1980-2010で30とすぐにわかる。しかし、その月、その日を経過しているのかをそれぞれチェックしなければならず、結局は長いコードになってしまう。その煩わしさからこの美しいコードは開放してくれる。素晴らしい。ちなみに、このアルバムは第二種情報処理技術者試験にも出たとか。

そして、せっかくの美しいコードを汚すと以下のようになるだろうか:

$age = $this->_getAge('1980/06/10');  //default
 $age = $this->_getAge('1980-06-10', '20000610');
 function _getAge($bd, $date = 'NOW'){
  $bd = new DateTime($bd);
  $bd =$bd->format('Ymd');

  $date = new DateTime($date);
  $date =$date->format('Ymd');

  return (int)(($date - $bd)/10000);
 }

# 日付を日付として計算しているわけではないというのを普通の人にも知ってほしいなぁと思ったり。

参考文献

コメント