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); }
# 日付を日付として計算しているわけではないというのを普通の人にも知ってほしいなぁと思ったり。
参考文献
- 年齢と誕生日の変換プログラム[PHP] – Webtech Walker :
301 Moved Permanently - 生年月日から年齢を計算する簡単な計算式 – 佐野裕のサーバ管理者日記:ITpro :
生年月日から年齢を計算する簡単な計算式最近知ったんですが、生年月日から年齢を計算する簡単な計算式というのがあるそうです。
コメント