西暦の日付から元号を調べる[javascript]

2022年2月8日

今年は令和なん年で、昭和っていつまで?(--)?
というわけで、調べました。

元号(年号)の初日と最終日

元号の初日と最終日
元号 最終日/初日
令和 - -
1 2019年 5月 1日
平成 31 2019年 4月30日
1 1989年 1月 8日
昭和 64 1989年 1月 7日
1 1926年12月25日
大正 15 1926年12月24日(12月25日)
1 1912年 7月30日
明治 45 1912年 7月29日
1 1868年 1月 1日(9月8日)

西暦の日付から元号(年号)を取得

年月日を変更すると、年号が確認できます。

※自作関数から取得
※Dateオブジェクトから取得

上記の表から関数を作る

※Dateオブジェクトに用意されているので、自作する必要性はないですが一応。

function get_gengou(y, m, d) {
  let gengou = {"meiji":"明治","taisyou":"大正","syouwa":"昭和","heisei":"平成","reiwa":"令和"}, i, x;
  if (y > 2019 || (y == 2019 && m >= 5)) {
    i = "reiwa";
    x = y - 2019 + 1;
  } else if (y > 1989 || (y == 1989 && ((m > 1) || (m == 1 && d >= 8)))) {
    i = "heisei";
    x = y - 1989 + 1;
  } else if (y > 1926 || (y == 1926 && (m == 12 && d >= 25))) {
    i = "syouwa";
    x = y - 1926 + 1;
  } else if (y > 1912 || (y == 1912 && ((m > 7) || (m == 7 && d >= 30)))) {
    i = "taisyou";
    x = y - 1912 + 1;
  } else if (y >= 1868) {
    i = "meiji";
    x = y - 1868 + 1;
  } else {
    return ["",0];
  }
  return [gengou[i], x];
}

JavascriptのDateオブジェクトに用意されているものから取得

let dt = new Date(y, (m - 1), d);
console.log( dt.toLocaleDateString("ja-JP-u-ca-japanese", {year:'numeric',month:'long',day:'numeric'}) );
console.log( new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {era:'long',year:'numeric',month:'long',day:'numeric'}).format(dt) );