令和になったタイミングということで、JavaScriptで西暦の年月日を和暦に変換する実装をしてみました。
サンプルコード
表示確認用に年月日の入力エリアと結果表示する要素を用意します。
HTML
<input id="input" type="text" value="2019/5/1" placeholder="YYYY/M/D"> <div id="result"></div>
JavaScriptで変換処理を記述します。
今回の対象は明治以降にしています。
JavaScript
// 表示確認用 var input = document.getElementById('input'); var result = document.getElementById('result'); var target = new Date(input.value); result.innerHTML = convert_to_japanese_calendar(target); // キー入力した際に変換を実行する input.addEventListener('keyup', function() { target = new Date(input.value); result.innerHTML = convert_to_japanese_calendar(target); }); /** * 指定した西暦の年月日を和暦に変換する * @param {date} target - 変換する年月日 */ function convert_to_japanese_calendar(target) { // 元号の情報 var jaCalender = [ { era: '明治', start: '1868/1/25' }, { era: '大正', start: '1912/7/30' }, { era: '昭和', start: '1926/12/25' }, { era: '平成', start: '1989/1/8' }, { era: '令和', start: '2019/5/1' }, ] for (var i = jaCalender.length - 1; i >= 0; i--) { var t = new Date(jaCalender[i]['start']); // 元号の範囲に入っている場合 if(target >= t) { // 和暦に変換して返す return jaCalender[i]['era'] + (target.getFullYear() - t.getFullYear() + 1) + '年' + (target.getMonth() + 1) + '月' + target.getDate() + '日'; } // 設定した元号の範囲に入らなかった場合 if(i <= 0) { return '対象範囲外です'; } } }
12~49行目の関数が西暦を和暦に変換する処理で、指定した年月日が元号の範囲に入っているかどうかを調べて、範囲に入っている場合は和暦を返しています。
和暦の年は指定した年と元号の開始年の差に1を足して算出しています。
西暦を和暦に変更するデモページ
ざっと試してみて問題なさそうでしたが、何かおかしな点あればコメントでご連絡ください。
実務的には、問題ないと思いますが、日本では、明治5年12月2日(1872年12月31日)まで太陰太陽暦(天保暦)が使用されていたが、1873年に太陽暦であるグレゴリオ暦を導入し、導入日を明治6年1月1日とした(Wikipedia「太陽暦」)ため、和暦での明治5年12月3日から12月31日が存在しません。
有難うございました。
試してみました。