西暦を和暦に変換する関数の修正版

以前「西暦を和暦に変換する関数」という記事を書いたことがありますが、その記事について「間違えてるよ~」というご指摘をいただきました。

匿名希望さん、ありがとうございました!
(また、遅くなりましてすみませんでした。)

以前のコードですと、 「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] + "日";
}

コピーペーストしていただいて、そのままお使いいただけます。

必要な方は是非!!

スポンサードリンク

コメントを残す

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