すごく久しぶりにそんな計算式の説明をしたので、せっかくなのでメモ。
目次
ある基準日時点での満年齢の計算方法のTips。
基準日の年月日および生年月日をいずれも yyyymmdd 形式の数値として
( [基準日のyyyymmdd] - [生年月日のyyyymmdd] ) / 10000 の整数部分
が満年齢
例
- 生年月日を 2000/03/15 とする
- 基準日を 2017/03/14 とする
( 20170314 - 20000315 ) / 10000 = 16.9999
→ 満16歳
- 生年月日を 2000/03/15 とする
- 基準日を 2017/03/15 とする
( 20170315 - 20000315 ) / 10000 = 17.0000
→ 満17歳
この式で計算できる理屈
- 下4桁(つまり月日)の差がマイナスになったら上4桁(つまり年)が繰り下がる
ことにより、 10000 で割り(下四桁分を小数点以下にし)整数部分をとることで
- 誕生日を過ぎていたら繰りさがらない = 年の差が満年齢
- 誕生日より前なら繰り下がる = 年の差 -1 が満年齢
となることを利用している。
10000で割るくらいなら
yyyy.mmdd - yyyy.mmdd の整数値
でも同義
2017.0314 - 2000.0315 = 16.9999 → 満16歳
2017.0315 - 2000.0315 = 17.0000 → 満17歳
ちなみに
厳密には、各種行政手続きの中での満年齢は誕生日の前日に加算される扱いとなっていることがあるので、
- 基準日を翌日にする
- 生年月日を前日扱いにする
などの処理が必要。
更に厳密には、年齢が加算されるタイミングは生年月日の前日の終わる瞬間(誕生日の00:00 ではなく、誕生日の前日の24:00 (23:59が終わった瞬間))らしい。
学年のはじめが 4/2 生まれの人(4/1 生まれの人は前年の最後)の所以です。
http://www.mext.go.jp/a_menu/shotou/shugaku/detail/1309966.htm
文部科学省: Q 4月1日生まれの児童生徒の学年についてどうなるのでしょうか。
動作テスト