以前「西暦を和暦に変換する関数」という記事を書いたことがありますが、その記事について「間違えてるよ~」というご指摘をいただきました。
匿名希望さん、ありがとうございました!
(また、遅くなりましてすみませんでした。)
以前のコードですと、 「1989/02/02」と入力した場合、「昭和64年2月2日」と出てしまいます。
これの原因は、最初の「if」のところで、「年が1990以上、または年が1989かつ月が1かつ日が7以上の時」としてしまったことです。つまり1989年は1月のみしか日付の判定をしていないということです。
つまり1989年の2~12月までは昭和と判定をされてしまいます。同様のことが大正と明治でも起こってしまいます。
あと、日付についてもちょっとしたミスがありました。平成元年は1月8日からでしたね。こちらも同じ方からご指摘をいただきました。
というわけで、修正版は以下になります。
function SeirekiToWareki( str ) {
var gengou = "";
a = str.split("/");
a[0] = parseInt(a[0]);
a[1] = parseInt(a[1]);
a[2] = parseInt(a[2]);
if ( a[0] > 1989 || ( a[0] == 1989 && a[1] > 1) || (a[0] == 1989 && a[1] == 1 && a[2] > 7 )) {
a[0] = a[0] - 1988;
gengou = "平成";
} else if ( a[0] > 1926 || ( a[0] == 1926 && a[1] == 12 && a[2] > 24 )) {
a[0] = a[0] - 1925;
gengou = "昭和";
} else if ( a[0] > 1912 || ( a[0] == 1912 && a[1] > 7 ) || ( a[0] == 1912 && a[1] == 7 && a[2] > 29 )) {
a[0] = a[0] - 1911;
gengou = "大正";
} else if ( a[0] > 1868 || ( a[0] == 1868 && a[1] > 1 ) || ( a[0] == 1868 && a[1] == 1 && a[2] > 24 )) {
a[0] = a[0] - 1867;
gengou = "明治";
}
if( a[0] == 1 ) {
a[0] = "元";
}
return gengou + a[0] + "年" + a[1] + "月" + a[2] + "日";
}
コピーペーストしていただいて、そのままお使いいただけます。
必要な方は是非!!