*

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

関連記事

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

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

記事を読む

coreserverでテストページ公開

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

記事を読む

CentOS6.5 NTFSマウント

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

記事を読む

WordPressでHighslide

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

記事を読む

メモリ交換 1GB -> 4GB

PCの動きがあまりに遅く、買い替えまでがまんできなくなったのでネットで探して交換しました。 O

記事を読む

VALUE-DOMAINでドメイン取得

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

記事を読む

CentOS6.5でChromium

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

記事を読む

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

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

記事を読む

CentOS6.5でskype

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

記事を読む

CentOS6.5にUSBヘッドセット

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

記事を読む

forPC

forPC

no image
Dineを使ってみて 1

Dineを使ってみての感想を書きます。このマッチングアプリの最大の特

RT-500KIとiPhone11、MacでVPN(L2PT)

iPhoneやMacで外出先からFAXの送受信をしたくなったので、N

スキー場でTHERMOS / サーモス

THERMOS / サーモス真空断熱スープジャー 400ml レッド

YKKap 内窓 プラマードU DIY 施工 掃き出し窓編

YKKap 内窓 プラマードU を追加しました。今回は掃き出し窓です

YKKap 内窓 プラマードU DIY 施工 引き違い窓編

YKKap 内窓 プラマードU を追加しました。窓枠のサイズは幅 1

→もっと見る

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