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の開発者バージョンでは既に対応されているようですので、時間の問題かと。