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);
});
}
[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);
});
}
コメント