こんにちは。
職人見習いの高嶋です。
生年月日からその人の現在の年齢を算出するケースはよくありますが、現在の学年を算出する必要に迫られ、少し困りました。
まず前提として以下の連想配列が定義されているとします。
$gakunenArray = array( 0 => '0~1歳児', 1 => '1~2歳児', 2 => '2~3歳児', 3 => '3~4歳児', 4 => '4~5歳児', 5 => '5~6歳児', 6 => '小学1年生', 7 => '小学2年生', 8 => '小学3年生', 9 => '小学4年生', 10 => '小学5年生', 11 => '小学6年生', 12 => '中学1年生', 13 => '中学2年生', 14 => '中学3年生', 15 => '高校1年生', 16 => '高校2年生', 17 => '高校3年生', 18 => '大学1回生', 19 => '大学2回生', 20 => '大学3回生', 21 => '大学4回生', );
その上である人の生年月日から上記の学年キーを導き出すというものです。
気をつけなければいけないのが以下の2点です。
- 学年としての年度は4/1~3/31までである。
- しかし4/1生まれは1学年上である。
それを踏まえた上でメソッドを作ってみました。
function gfGetAgeAndGakunen($birthday, $gakunen_difference = 0)
{
// 本日
$t_y = date('Y');
$t_m = date('m');
$t_d = date('d');
// 誕生日
list($b_y, $b_m, $b_d) = preg_split("/-|/| /", $birthday);
$t_md = intval( sprintf("%02d%02d", $t_m, $t_d) );
$b_md = intval( sprintf("%02d%02d", $b_m, $b_d) );
//-----年齢の計算
$age = $t_y - $b_y;
if($t_m * 100 + $t_d {
$age--;
}
//-----学年の計算
$gakunen = $age;
if( $t_md >= 401 ) // 本日が4/1~12/31の場合
{
if( $b_md >= 402 ) // 誕生日が4/2~12/31の場合
{
if( $t_md >= $b_md ) $gakunen--; // 今年度、既に誕生日を迎えていれば年齢-1が学年
}
}
else // 本日が1/1~3/31の場合
{
if( $b_md >= 402 ) // 誕生日が4/2~12/31の場合
{
$gakunen--; // 今年度は既に誕生日を迎えているので、年齢-1が学年
}
else // 誕生日が1/1~4/1の場合
{
if( $t_md >= $b_md ) $gakunen--; // 今年度、既に誕生日を迎えていれば年齢-1が学年
}
}
// 留年や飛び級計算
$gakunen += $gakunen_difference;
return array($age, $gakunen);
}
メソッドの第1引数に『yyyy/mm/dd』の誕生日を、
第2引数には1年留年生なら『-1』、1年飛び級生なら『1』を渡します。
基本は『0』です。
※この記事は、なかの人(piro556)が書いています。