2012.
10.
04
13:38:27
PHPで生年月日から誕生日を求める関数を探していたら
こんなのが色んなところで紹介されていましたφ(--)
$age = (int)((date('Ymd')-19790101)/10000);
「19790101」のところに生年月日を「YYYYMMDD」形式で入れればOKらしい。
ついでに「date('Ymd')」のところを任意の日付に変えれば
ある日時点の年齢を求めることも可能ですね。
ほっほー、なるほど。
考えた人すっげーな。
理屈としては年の差を取っているだけなのですが、
秀逸なのが小数点以下の部分。
その年の誕生日がまだ来ていない場合は自動的に繰り下がりが出るので
「もし誕生日がまだだったら1歳引く」って
条件分岐させなくても一発で分かりますよってな理屈。
10000で割ってるのは実質的に年の比較にしたいからでしょう。
YYYYMMDD形式の8桁の数字を10000で割ると
YYYY.MMDDな4桁+小数点以下4桁になるので。
例えば今日が2012年10月04日で誕生日が2000年10月3日だとすると
(20121004-20001003)/10000 = 12.0001
で12歳、誕生日が2000年10月4日だとすると
(20121004-20001004)/10000 = 12.0000
で12歳、誕生日が2000年10月5日だとすると
(20121004-20001005)/10000 = 11.9999
で11歳になりますね。
わぁ~便利ぃ(人´∀`)
……ってな感じで大絶賛しておいて申し訳ないのですが
個人的にはこーゆー書き方の方が好きですφ(--)
//今日
$now_year = date("Y");
$now_month = date("m");
$now_day = date("d");
//誕生日
$birth_year = 1979;
$birth_month = 1;
$birth_day = 1;
//年齢計算
$age = $now_year - $birth_year;
if($now_month * 100 + $now_day < $birth_month * 100 + $nowbirth_day_day){
//まだ誕生日がきていないとき
$age--;
}
プライベートだったら前者、お仕事だったら後者で書くかなぁ、多分。
こんなのが色んなところで紹介されていましたφ(--)
$age = (int)((date('Ymd')-19790101)/10000);
「19790101」のところに生年月日を「YYYYMMDD」形式で入れればOKらしい。
ついでに「date('Ymd')」のところを任意の日付に変えれば
ある日時点の年齢を求めることも可能ですね。
ほっほー、なるほど。
考えた人すっげーな。
理屈としては年の差を取っているだけなのですが、
秀逸なのが小数点以下の部分。
その年の誕生日がまだ来ていない場合は自動的に繰り下がりが出るので
「もし誕生日がまだだったら1歳引く」って
条件分岐させなくても一発で分かりますよってな理屈。
10000で割ってるのは実質的に年の比較にしたいからでしょう。
YYYYMMDD形式の8桁の数字を10000で割ると
YYYY.MMDDな4桁+小数点以下4桁になるので。
例えば今日が2012年10月04日で誕生日が2000年10月3日だとすると
(20121004-20001003)/10000 = 12.0001
で12歳、誕生日が2000年10月4日だとすると
(20121004-20001004)/10000 = 12.0000
で12歳、誕生日が2000年10月5日だとすると
(20121004-20001005)/10000 = 11.9999
で11歳になりますね。
わぁ~便利ぃ(人´∀`)
……ってな感じで大絶賛しておいて申し訳ないのですが
個人的にはこーゆー書き方の方が好きですφ(--)
//今日
$now_year = date("Y");
$now_month = date("m");
$now_day = date("d");
//誕生日
$birth_year = 1979;
$birth_month = 1;
$birth_day = 1;
//年齢計算
$age = $now_year - $birth_year;
if($now_month * 100 + $now_day < $birth_month * 100 + $nowbirth_day_day){
//まだ誕生日がきていないとき
$age--;
}
プライベートだったら前者、お仕事だったら後者で書くかなぁ、多分。