自動学年更新機能を導入するために調べ物。
誕生日が1/1~4/1以前の人は前年生まれとして計算(いわゆる早生まれ)
※4/1の人も含む。
学齢:(Wikipediaより)
学齢(がくれい)とは学校に就学して教育を受けることが適切とされる年齢のことである。日本では、満6歳の誕生日以後の最初の4月1日から9年間(満15歳に達した日以後の最初の3月31日まで)が該当する。第二次世界大戦後の日本においては義務教育の対象年齢にあたる者のことを「学齢○○」と称するため、日本国籍者についての学齢期と義務教育期は同一のものを指している。このため、あえて義務教育と学齢の概念を区別して解説する意味は薄いが、かつては学齢期と義務教育期間は明確に異なる概念であった。学齢は、義務教育と関係が深い概念なので、より深く理解するには「義務教育」の記事も参照。
簡単に言うと一般的に6~7歳だったら小1生です、12~13歳だったら中1生ですね! という感じ
誕生日を数値化して場合分け $birthday < = 0401 とか、
うるう年とかの処理を考えたりとか、めんどくさい上に信頼性低そうで見通しの悪い処理をしてたところ、
「誕生日に274日(閏年に左右されない4/2から12/31までの日数)を加えた日を基準にして
経過年を計算すれば、基準をそろえることにより変な条件を取っ払って処理しなさい」
ということが言及されていたorz
当年にそろえるのは思いついたけど、閏年問題がうっとうしいし、処理ミス怖い
→左右されないために、日数加えて翌年にそろえる という考えは頭が固くなりすぎてて思いつかなかった…脳トレしないと。
簡単に $userBirthday に誕生日を放り込んで , $year に調べたい年を入れる
[php]
function getGakurei($userBirthday = '1970-01-01', $year = null){
$ret = 99;
//指定が無ければ現在の年について調査
if (!isset($year)){
$year = date('Y');
}
//274日を加える のは 学年度始まりが4/2からのため、そこから12/31までの日数を加えるといい具合になる
$checkDate = $year . '0401' ;
$checkDateInt = (int)(date( 'Ymd' , strtotime( $checkDate . '+274 day') ));
$birthdayInt = (int)(date('Ymd' , strtotime( $userBirthday . '+ 274 day' )));
$gakureiId = (int)( ( $checkDateInt - $birthdayInt ) / 10000 );
$gakureiId++;
return $gakureiId;
}
[/php]
$grade_id = getGakurei( '2000-07-31' , 2012 );
などとすると、4/1の段階での学齢に対応するとみなした数値が返されるので、
適当にDBとマッチさせてあげれば
7 => 小1
8 => 小2
:
:
13 => 中1
:
という風にできあがり!