*

PHP 誕生日から年齢計算と日本国法

公開日: : 最終更新日:2014/02/27 MySQL, PC, PHP

何も考えずに誕生日から年齢計算をするのは簡単です。
しかし何も考えないと訴訟問題に発展するのが年齢計算でもあります。

PHPなら

int(([基準日]-[生年月日])/10000) や floor(([基準日]-[生年月日])/10000) で計算できます。
ex : (int)((date(‘Ymd’)-19901010)/10000);

MySQLなら

SELECT (YEAR(CURDATE())-YEAR(’1990-10-10′)) – (RIGHT(CURDATE(),5)<RIGHT(’1990-10-10′,5)) AS age;

以上なのですが…
1日ずれます。
日本はいろいろとめんどくさい部分があります。

まず法律
●年齢計算ニ関スル法律
明治35年12月2日法律第50号 現行法です。

  • 年齢は出生の日より之を起算す
  • 民法第143条の規定は年齢の計算に之を準用す
  • 明治6年第36号布告は之を廃止す

わずか54文字の法律でシンプルなのですが、いろいろと問題があります。

通常期間計算において「起算日」は、初日を省いて翌日とするのが原則です。
たとえば結婚記念日。 何を持って記念とするかはおいておいて、入籍日が10月10日の場合、毎年10月10日が結婚記念日となります。
これは10月11日を起算日として、翌年10月10日が結婚何周年としているからです。
祝い事で考えた場合、誕生日も同じ考え方なのですが、法律は起算日がその日が起算日になっています。
すなわち10月10日生まれなら10月9日に満年齢が1つ加算されるのです。
この考え方の不一致がそもそもの問題なのです。

そして年齢が関係する法律はたくさんあります。
例えば義務教育や、運転免許取得年齢、選挙権や参政権、国家資格など年金受給年齢など様々なところで法律に年齢が出てきます。

そしてその法律解釈によりプログラミングが変わります。
具体的に言うと「誕生日前日」と「誕生日当日」から効力を持つ法律があります。

1.「×歳に達した日」の場合、誕生日の前日0時から効力を持つ。
2.「×歳以上」「×歳に満たない者」など「日」を含まない場合、時間単位と解釈され午後12時に効力を持ちます。
3.「×歳に達した日の翌日」は単純に誕生日をさします。

このように私たちが日常的に使っている年齢計算は1日遅れています。
商店が顧客誕生日に年齢付でDMを送る分にはいいんでしょうが、満年齢は誕生日の前日に加算されるので注意が必要です。

\n”;
$tassuruFlg=1;
echo “$birthdayDate:$anyDate:$tassuruFlg = “.getAge($birthdayDate,$anyDate,$tassuruFlg).”
\n”;

$anyDate=”20131010″;
$tassuruFlg=0;
echo “$birthdayDate:$anyDate:$tassuruFlg = “.getAge($birthdayDate,$anyDate,$tassuruFlg).”
\n”;
$tassuruFlg=1;
echo “$birthdayDate:$anyDate:$tassuruFlg = “.getAge($birthdayDate,$anyDate,$tassuruFlg).”
\n”;

?>

実行結果
19901010:20131009:0 = 22
19901010:20131009:1 = 23
19901010:20131010:0 = 23
19901010:20131010:1 = 23
getAge

MySQLなら
こんな感じでしょうか

SELECT (YEAR(NOW())-YEAR(’1990-10-10′)) – (DATE_FORMAT(’1990-10-10′ – INTERVAL 1 DAY , ‘%m-%d’ ) > DATE_FORMAT(NOW(), ‘%m-%d’ )) AS age;

メタ文字などを変にエスケープされてしまうので、元ファイルをダウンロードできるようにしました。
●download●
http://blog.sensuishi.net/download/?f=getAge.zip

この年齢計算に関する法律と学校教育法の関係から、4月1日生まれの人は3/31に満六歳になり、学校教育法に学年は4/1~翌年3/31とし、保護者は子女の満6才に達した日の翌日以後における最初の学年の初めから、満12才に達した日の属する学年の終わりまで、小学校に通わせるように定められているので、所謂早生まれ扱いになります。

また公職選挙法とも矛盾が生じているとの見解もありますが、私は「選挙の期日により算定する」と定められているので期日すなわち「日」を含み、午前0時に効力を持つものだと思います。
しかし午後12時に選挙権や被選挙権を有する様になり、実際に投票に行く時にはまだ19歳であるという問題が国会に提起された事もあります。

forPC

関連記事

Screenshot-HOWLT - Chromium

CentOS6.5にFlash Player

Flashを使っているページに行くと残念な感じになるので、インストールしました。 rpm

記事を読む

maps

Geolocation API でスタッフの現在地を把握

業務用サイトにログインした際、携帯の位置情報サービスをDBに保存し、軌跡を辿ったり、最終更新場所での

記事を読む

domain02

VALUE-DOMAINでドメイン取得

当サイトはVALUE-DOMAINとCORESERVERで安価に独自ドメインを運用しております。

記事を読む

DSC_8551

WZR-900DHP 中継機設定

電波の死角が多そうな案件で依頼を受けたので、中継機を1台設置する構成で提案しました。 よく

記事を読む

DSC_8526

vostro1000にCentOS6.5インストール

MySQLを直接操作するのではなくGUI上で見たいデータがあることや、PCを電話として使用する頻度が

記事を読む

Screenshot09

CentOS6.5 NTFSマウント

windowsマシンで使っているNTFSフォーマットのHDDなどを繋いだ際、マウントできないのでカー

記事を読む

Screenshot01

CentOS6.5にUSBヘッドセット

CentOS6.5でUSBヘッドセット ELECOM HS-NB01UBK を使える様にしました。

記事を読む

2013-12-10 10:16:21

レンタルサーバーか自前サーバーか

ホームページを開設しよう! と、はじめて思った人が自分でサーバー設置して、保守管理までやることはな

記事を読む

Screenshot10

CentOS6.5でChromium

CentOS6.5にGoogle Chromeをインストールしようとしたところ、トランザクションエラ

記事を読む

Screenshot

CentOS6.5でskype

CentOS6.5でskypeを使える様にします。 必要なパッケージのインストール y

記事を読む

forPC

forPC

img_0027
2016年 丙申 お遍路逆打ち 8日目

この日はあと4つ参拝するだけなので朝はゆっくりです。 昨夜スーパーで

img_9927
2016年 丙申 お遍路逆打ち 7日目

この日は早く到着したので7時に納経所に行けるように行動開始。 6

img_9832
2016年 丙申 お遍路逆打ち 6日目

7:10 第31番札所 竹林寺(ちくりんじ)

img_9592
2016年 丙申 お遍路逆打ち 5日目

今朝は7時に合わせて行動です。 6:59 第40番札所 観自在

img_9481
2016年 丙申 お遍路逆打ち 4日目

深夜に大阪市を出発し圓明寺へ。 6:50 第53番札所 圓明寺

→もっと見る

  • Oisix(おいしっくす)
PAGE TOP ↑