*

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

関連記事

CentOS6.5にFlash Player

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

記事を読む

vostro1000にCentOS6.5インストール

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

記事を読む

CentOS6.5でChromium

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

記事を読む

WordPressでHighslide

ホームページでHighslideを使っていて、写真の多いブログの時にも使えたら便利だなぁってことで、

記事を読む

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

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

記事を読む

CentOS6.5にUSBヘッドセット

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

記事を読む

光ネクスト 隼 PR-400MI ブリッジモード

フレッツ光ネクスト隼を導入した際に設置されたPR-400MIをブリッジモードで運用しましたので、その

記事を読む

WordPress 3.8.34 から5.5.1へアップデート

まずSSL化してからWordPress 3.8.34 から5.5.1へアップデートしました。特に難

記事を読む

WZR-900DHP 中継機設定

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

記事を読む

coreserverでテストページ公開

まずはサーバーアカウントの取得(購入若しくはお試し) はじめてやる人はMINIで十分だ

記事を読む

forPC

forPC

L375S プラグ&ダイレクトイグニッションコイル交換

先日名神高速を走行中になんとなくパワーダウンを感じました。下り線で草

初 Uber Eats

Uber は海外でよく使うタクシーアプリなのでインストールしている

WordPress 3.8.34 から5.5.1へアップデート

まずSSL化してからWordPress 3.8.34 から5.5.1

no image
WordPress のログイン画面が表示されない問題

久しぶりにアクセスすると閲覧画面はちゃんと動作しているが、 /wp-a

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

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

→もっと見る

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