Last Update: Sep.16,2021

JavaScript Sample

動作確認: ○Firefox92(Win7) ○Chrome93(Win7)

■ 年齢・学齢・数え年計算

▼生年月日を入力

現在:2025/06/07
年齢:満18歳
学齢:
未就学:false
3歳以上:true
数え年:19歳

■ ソース

/*
 *  年齢計算
 *
 *    a: 誕生日
 *    b: 年齢を取得する日(省略時は現在)
 *
 */
var get_age = function(a, b) {
  if (!b) b = new Date();
  var r = b.getFullYear() - a.getFullYear();
  var dt = new Date(b.getFullYear(), a.getMonth(), a.getDate());
  return b < dt ? r - 1 : r;
};

/*
 *  学齢計算
 *
 *    a: 誕生日
 *    b: 学齢を取得する日(省略時は現在)
 *
 */
var get_school_age = function(a, b) {
  if (!b) b = new Date();
  var y = b.getFullYear();
  if (b.getMonth() < 3) y--;
  return get_age(a, new Date(y, 3, 1));
};

/*
 *  未就学児かどうか
 *
 *    a: 誕生日
 *    b: 判定する日(省略時は現在)
 *
 */
var is_pre_school = function(a, b) {
  return get_school_age(a, b) < 6;
};

/*
 *  (n)歳以上かどうか
 *
 *    n: 基準になる年齢
 *    a: 誕生日
 *    b: 判定する日(省略時は現在)
 *
 */
var is_over_age = function(n, a, b) {
  return get_age(a, b) >= n;
};

/*
 *  数え年計算
 *
 *    a: 誕生日
 *    b: 年齢を取得する日(省略時は現在)
 *
 */
var get_kazoedoshi = function(a, b) {
  if (!b) b = new Date();
  var y = a.getFullYear();
  return get_age(new Date(y, 0, 1), b) + 1;
};

/*
 *  Date を日付文字列に変換
 *
 */
var date_to_string = function(dt, sep) {
  return [
    dt.getFullYear().toString().padStart(4, '0'),
    (dt.getMonth() + 1).toString().padStart(2, '0'),
    dt.getDate().toString().padStart(2, '0')
  ].join(!sep ? '-' : sep);
};

/*
 *  整数化
 *
 */
var intval = function(s, b) {
  var n = parseInt(s, b || 10);
  return isNaN(n) ? 0 : n;
};

jQuery(function($) {

  var gakurei = [
    '未就学', '未就学', '未就学',
    '未就学(年少)', '未就学(年中)', '未就学(年長)',
    '小1', '小2', '小3', '小4', '小5', '小6',
    '中1', '中2', '中3',
    '高1', '高2', '高3'
  ];

  $('#B1').on('click', function() {
    var y = intval($('#Y1').val());
    var m = intval($('#M1').val());
    var d = intval($('#D1').val());
    var bday = new Date(y, m - 1, d);
    var now = new Date();
    var g = get_school_age(bday, now);
    $('#p0').text('現在:' + date_to_string(now, '/'));
    $('#p1').text('年齢:満' + get_age(bday, now) + '歳');
    $('#p2').text('学齢:' + (g < 18 ? gakurei[g] : ''));
    $('#p3').text('未就学:' + is_pre_school(bday, now));
    $('#p4').text('3歳以上:' + is_over_age(3, bday, now));
    $('#p5').text('数え年:' + get_kazoedoshi(bday, now) + '歳');
  }).trigger('click');

});