和暦年と西暦年を相互に変換する方法

Pocket

JavaScriptで和暦年から西暦年への変換、西暦年から和暦年への変換についてまとめました。

スクリプトの最初に元号と元年の西暦年を並べたgannenを置きます。
wa2sei、sei2waがそれぞれ和暦から西暦、西暦から和暦への変換をする関数です。
wa2seiは例えば「昭和45年」を「1970年」に変換します。
sei2waは例えば「1970年」を「昭和45年」に変換します。「1989年」は「昭和64年/平成元年」になります。
全角にも対応します。
「年」がなくても対応します。
元号はアルファベット1文字でも対応します。
「元年」に対応します。

const gannen = [
  [1865, "慶応", "k"],
  [1868, "明治", "m"],
  [1912, "大正", "t"],
  [1926, "昭和", "s"],
  [1989, "平成", "h"],
  [2019, "令和", "r"],
  [9999, "", ""]
];

function wa2sei(gengo_wanen) {
  ms = gengo_wanen.match(/([^0-90-9]+)([0-90-9]+)年?/);
  if (!ms) {
    return "";
  }
  gengo = zen2han(ms[1]);
  nen = Number(zen2han(ms[2]));
  for (j = 0; j < gannen.length - 1; j++) {
    p = new RegExp(gannen[j][2], "i");
    if (ms[1] == gannen[j][1] || gengo.match(p)) {
      return (nen + gannen[j][0] - 1) + "年";
    }
  }
  return "";
}

function sei2wa(seinen) {
  ms = seinen.match(/([0-90-9]+)年?/);
  if (!ms) {
    return "";
  }
  nen = Number(zen2han(ms[1]));
  if (nen < 1868 || 9999 < nen) {
    return "";
  }
  for (j = 1; j < gannen.length - 1; j++) {
    if (nen == gannen[j][0]) {
      ts = [];
      ts.push(gannen[j - 1][1] + (nen - gannen[j - 1][0] + 1) + "年");
      ts.push(gannen[j][1] + "元年");
      return ts.join("/");
    }
    if (nen > gannen[j][0] && nen < gannen[j + 1][0]) {
      return gannen[j][1] + (nen - gannen[j][0] + 1) + "年";
    }
  }
  return "";
}

function zen2han(str) {
  return str.replace(/[0-z]/g, function($0) {
    return String.fromCharCode(parseInt($0.charCodeAt(0)) - 65248);
  });
}

[ 2023年1月27日 | カテゴリー: JavaScript | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報