We Blog Weblog

生年月日から年齢を計算

ブログ

2024年5月20日

生年月日から年齢を計算するツールを作ってみました。

そんなのどこで使うのかですって?
たまにあるんです、生年月日が和暦しか載ってなくて、
年齢が載ってない欄外にちぃぃっっっちゃく書いてある処方箋が...

医師法施行規則第21条:医師は、患者に交付する処方せんに、患者の氏名、年齢、薬名、分量、用法、用量、発行の年月日、使用期間及び病院若しくは診療所の名称及び所在地又は医師の住所を記載し、記名押印又は署名しなければならない。

処方箋への年齢の記載は必須のようですね。

ここに年齢が出ます

 

参考:ShanaBrian Website|日付から年齢を自動計算

参考:厚生労働省|和暦西暦早見表

年、月、日の入力欄と、年齢の出力欄を設置します。今回は<input type="date">ではなく、セレクトボックスにしてみました。

厚生労働省の和暦西暦早見表が明治30年から始まっていたので、それに倣いました。

<form action="./" method="post" name="form1" id="form1">

  <select name="year">
    <option value="1897">1897年(明治30年)</option>
    <option value="1898">1898年(明治31年)</option>
    <option value="1899">1899年(明治32年)</option>
      ・
      ・
      ・
    <option value="2024">2024年(令和6年)</option>
  </select>

  <select name="month">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
      ・
      ・
      ・
    <option value="12">12</option>
  </select>

  <select name="days">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
      ・
      ・
      ・
    <option value="31">31</option>
  </select>

  <output name="age" value="">ここに年齢が出ます</output>
                
</form>

本当は和暦→西暦に変換する機能も実装したかったのですが、和暦の切り替わり(平成→令和とか)が難しそうだったので今回は西暦と和暦を併記することにしました。


スクリプトを記述します。

var formObj = '';
var zeroPadding = function (number, digit) {
  var numberLength = String(number).length;
  if (digit > numberLength) {
    return (new Array((digit - numberLength) + 1).join(0)) + number;
  } else {
    return number;
  }
};
var ageCalculator = function (year, month, day) {
  var dateObj = new Date(),
    today = parseInt('' + dateObj.getFullYear() + zeroPadding(dateObj.getMonth() + 1, 2) + zeroPadding(dateObj.getDate(),
      2)),
    birthday = parseInt('' + year + zeroPadding(month, 2) + zeroPadding(day, 2));
  return parseInt((today - birthday) / 10000);
};
var changeDate = function (mode) {
  var tYear = formObj.year,
    tMonth = formObj.month,
    tDays = formObj.days,
    selectY = tYear.options[tYear.selectedIndex].value,
    selectM = tMonth.options[tMonth.selectedIndex].value,
    selectD = tDays.options[tDays.selectedIndex].value;
  if (mode === 'date') {
    var dateObj = new Date(selectY, selectM, 0);
    tDays.length = 0;
    for (var i = 1, len = dateObj.getDate(); i <= len; i++) {
      tDays.options[i] = new Option(i, i);
    }
    tDays.removeChild(tDays.options[0]);
    tDays.options[selectD > tDays.length ? tDays.length - 1 : selectD - 1].selected = true;
  }
  formObj.age.value = ageCalculator(selectY, selectM, selectD) + "歳";
};
formObj = document.form1;
formObj.year.onchange = function () {
  changeDate('date');
};
formObj.month.onchange = function () {
  changeDate('date');
};
formObj.days.onchange = function () {
  changeDate('age');
};

うーん、半分以上わからない\(^o^)/

年を4桁、月を2桁、日を2桁の整数にして(1桁ならゼロ埋め)

年月日を横に並べて8桁の数値にして(例:2024年5月20日→20240520)

今日の数値から誕生日の数値を引いて10000で割ればその整数部分が年齢になる、ということでしょうか。

ちなみに閏年うるうどし(2月が29日まである年)についてですが、

・西暦が4で割り切れる年は閏年

・西暦が100で割り切れる年は閏年ではない

・西暦が400で割り切れる年は閏年

だそうです(初めて知りました)

今回のツールでは月の日数(28日、30日、31日)を勝手に区別してくれて、閏年の場合はちゃんと2月が29日までになります。なんでかな。getFullYearのおかげ?

ケミストでは引き続き「ブログ」のテーマを募集しています!
調べてほしい、まとめてほしい薬の情報がありましたら教えてください。

この記事を書いた人
みやの
Web・DTP担当

Contact Us

ご意見、ご相談、料金のお見積もりなど、お気軽にお問い合わせください。

お問い合わせはこちら

TOP