生年月日を入力:
対象の年月日を入力:
対象日:2025/05/25(日)
年齢:満18歳
学年:
数え年:19歳
前の稼働日:2025/05/23(金)
次の稼働日:2025/05/26(月)
/* * 次の稼働日を取得 * * a: 基準となる日付 * o: is_workday に渡す休みの配列 * */ var get_next_workday = function(a, o) { return business_days_later(a, 1, o); }; /* * 直前の稼働日を取得 * * a: 基準となる日付 * o: is_workday に渡す休みの配列 * */ var get_last_workday = function(a, o) { return business_days_ago(a, 1, o); }; /* * 学年を取得 * * a: 誕生日 * b: 学年を取得する日(省略時は現在) * */ var get_gakunen = function(a, b) { var _ = [ '未就学', '未就学', '未就学', '未就学(年少)', '未就学(年中)', '未就学(年長)', '小1', '小2', '小3', '小4', '小5', '小6', '中1', '中2', '中3', '高1', '高2', '高3' ]; var g = get_school_age(a, b); return g < 18 ? _[g] : ''; }; jQuery(function($) { var jogai = ['日', '土', '祝', '年末年始']; if ($('#D2').val() == '') { $('#D2').val(date8_to_string(date8())); } $('#D1,#D2').on('change', function() { var bday = string_to_date8($('#D1').val()); var now = string_to_date8($('#D2').val()); var wd1 = get_next_workday(now, jogai); var wd2 = get_last_workday(now, jogai); $('#p0').text(`対象日:${date8_to_string(now, '/')}(${get_day_of_week(now)})`); $('#p1').text(`年齢:満${get_age(bday, now)}歳`); $('#p2').text(`学年:${get_gakunen(bday, now)}`); $('#p3').text(`数え年:${get_kazoedoshi(bday, now)}歳`); $('#p4').text(`前の稼働日:${date8_to_string(wd2, '/')}(${get_day_of_week(wd2)})`); $('#p5').text(`次の稼働日:${date8_to_string(wd1, '/')}(${get_day_of_week(wd1)})`); }).trigger('change'); });
/* * date8.js 0.05 * * Date: 2021.10.14 * * Copyright (c) 2021 AOK (aokura.com) * */ if (!gettype) { var gettype = function(v) { var s = Object.prototype.toString.call(v); return s.replace(/^\[object (\w+)\]$/, "$1"); }; } /* * 日付を数値に変換(yyyymmdd) * */ var date8 = function(y, m, d) { var dt; if (arguments.length == 0) { dt = new Date(); } else if (gettype(y) === 'Array') { dt = new Date(y[0], y[1] - 1, y[2]); } else if (gettype(y) === 'Date') { dt = y; } else if (arguments.length == 1) { dt = new Date(y, 0, 1); } else if (arguments.length == 2) { dt = new Date(y, m - 1, 1); } else { dt = new Date(y, m - 1, d); } return dt ? date_to_date8(dt) : 0; }; /* * Date を日付を表す数値に変換 * */ var date_to_date8 = function(dt) { var y = dt.getFullYear(); var m = dt.getMonth() + 1; var d = dt.getDate(); return y * 10000 + m * 100 + d * 1; }; /* * 日付を表す数値を Date に変換 * */ var date8_to_date = function(n8) { var a = date8_to_array(n8); return new Date(a[0], a[1] - 1, a[2]); }; /* * 日付を表す数値を配列に変換([y,m,d]) * */ var date8_to_array = function(n8) { var y = Math.floor(n8 / 10000); var m = Math.floor(n8 / 100) % 100; var d = n8 % 100; return [y, m, d]; }; /* * 日付を表す数値の加算 * (a: [y,m,d]) * */ var date8_add = function(n8, a) { var b = date8_to_array(n8); b[0] += a[0]; b[1] += a[1]; if (b[2] > 28) { var e = new Date(b[0], b[1], 0).getDate(); if (b[2] > e) b[2] = e; } b[2] += a[2]; return date8(b); }; /* * 数値を日付文字列に変換 * */ var date8_to_string = function(n8, sep) { var r = date8_to_array(n8); r[0] = r[0].toString().padStart(4, '0'); r[1] = r[1].toString().padStart(2, '0'); r[2] = r[2].toString().padStart(2, '0'); return r.join(!sep ? '-' : sep); }; /* * 日付文字列を数値に変換 * */ var string_to_date8 = function(s, sep) { return date8(s.split(!sep ? '-' : sep)); }; /* * Date を配列に変換 * */ var date_to_array = function(dt) { if (!dt) dt = new Date(); var y = dt.getFullYear(); var m = dt.getMonth() + 1; var d = dt.getDate(); return [y, m, d]; }; /* * Utility functions * */ /* * 日付を表す数値から曜日を取得 * */ var get_day_of_week = function(n8) { if (gettype(n8) !== 'Date') { n8 = date8_to_date(n8); } return '日月火水木金土'.charAt(n8.getDay()); }; /* * 年齢計算 * * a: 誕生日 * b: 年齢を取得する日(省略時は現在) * */ var get_age = function(a, b) { if (!b) b = date8(); if (gettype(a) === 'Date') a = date8(a); if (gettype(b) === 'Date') b = date8(b); return Math.floor((b - a) / 10000); }; /* * 学齢計算 * * a: 誕生日 * b: 学齢を取得する日(省略時は現在) * */ var get_school_age = function(a, b) { var r = date8_to_array(b); if (r[1] < 4) r[0]--; return get_age(a, date8(r[0], 4, 1)); }; /* * 数え年計算 * * a: 誕生日 * b: 年齢を取得する日(省略時は現在) * */ var get_kazoedoshi = function(a, b) { var r = date8_to_array(a); return get_age(date8(r[0], 1, 1), b) + 1; }; /* * 稼動日かどうかの判定 * * a: 判定する日付 * o: 休みの配列 * '日'~'土': 日~土曜(毎週) * '祝': 祝日 * '年末年始': 年末年始休み * */ var is_workday = function(a, o) { var w = get_day_of_week(a); if (o.indexOf(w) != -1) return false; var b = date8_to_array(a); if (typeof MonthHolidays === 'function' && o.indexOf('祝') != -1) { var mhd = new MonthHolidays(b[0], b[1]); if (mhd.check(b[2]) != '') return false; } if (o.indexOf('年末年始') != -1) { var b1 = date8(b[0], 1, 4); var b2 = date8(b[0], 12, 28); if (a < b1 || a > b2) return false; } return true; }; /* * (n)営業日前を取得 * * a: 基準となる日付 * n: 日数 * o: is_workday に渡す休みの配列 * */ var business_days_ago = function(a, n, o) { while (n > 0) { a = date8_add(a, [0, 0, -1]); if (is_workday(a, o)) n--; } return a; }; /* * (n)営業日後を取得 * * a: 基準となる日付 * n: 日数 * o: is_workday に渡す休みの配列 * */ var business_days_later = function(a, n, o) { while (n > 0) { a = date8_add(a, [0, 0, 1]); if (is_workday(a, o)) n--; } return a; }; /* * (n)日前の稼働日を取得 * * a: 基準となる日付 * n: 日数 * o: is_workday に渡す休みの配列 * */ var n_days_ago = function(a, n, o) { a = date8_add(a, [0, 0, 1 - n]); return business_days_ago(a, 1, o); }; /* * (n)日後の稼働日を取得 * * a: 基準となる日付 * n: 日数 * o: is_workday に渡す休みの配列 * */ var n_days_later = function(a, n, o) { a = date8_add(a, [0, 0, n - 1]); return business_days_later(a, 1, o); };