JavaScriptで西暦を和暦に変換する

先日、「Windows Updateで元号に関する不具合が発生する可能性」で西暦和暦の変換について書いた際、JavaScriptにもtoLocaleDateStringという和暦変換の関数があることを知ったので、備忘録としてメモメモ。

ちなみに、その記事で書いたとおり、Windows Updateによる不具合の影響は.NET Framework 4以降のみなので、JavaScriptには特に影響ありません。

JavaScriptで西暦和暦変換

サンプルコード

<script>
var dt = new Date();
document.write(dt.toLocaleDateString('ja-JP-u-ca-japanese', {era:'long'}));
</script>

動作結果

解説

現在の日付で新しいDateオブジェクトを作成し、そのDateオブジェクトのtoLocaleDateStringで和暦変換をしています。

toLocaleDateStringに指定できるオプションは主に書式に関するもので、eraにlongと指定すると「平成」、narrowを指定すると「H」といった変換が行われます。一応、shortというのもあるのですが、「平」とはならず「平成」と変換されるのは謎。

入力された任意の日付を和暦変換するサンプル

先述の例だけだとちょっと寂しいため、もう少し機能追加して、任意の日付を変換する例

サンプルコード

西暦:<input type="date" id="ymd">
<select id="era">
<option>long</option>
<option>short</option>
<option>narrow</option>
</select>
<button onclick="toWareki();">変換</button>
<input type="text" id="wareki" readonly>

<script>
function toWareki()
{
	//入力された日付からDateオブジェクトを作成
	var arr = document.getElementById('ymd').value.split('-');
	var dt = new Date(arr[0], arr[1] - 1, arr[2]);
	//元号の書式に関するオプションを設定
	var opt = {era:document.getElementById('era').value};
	//toLocaleDateStringで西暦→和暦変換
	document.getElementById('wareki').value = dt.toLocaleDateString('ja-JP-u-ca-japanese', opt);
}
function getToday()
{
	var dt = new Date();
	var y = dt.getFullYear();
	var m = ('0' + (dt.getMonth()+1)).slice(-2);
	var d = ('0' + dt.getDate()).slice(-2);
	return y + '-' + m + '-' + d;
}
document.getElementById('ymd').value = getToday();
</script>

動作結果

西暦:

※西暦の部分はtype=”date”にしているためChromeやEdgeなどのモダンブラウザならカレンダーの表示もされるはずです。

まとめ

JavaScriptで西暦→和暦変換するにはDateオブジェクトのtoLocaleDateString関数を使うとカンタン!

新元号:令和について

2019年5月10日追記:まだどのブラウザもtoLocaleDateString関数による令和表記には対応していないようですが、Chromeの開発者バージョンでは既に対応されているようですので、時間の問題かと。

adsbygoogle

フォロー