UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【JavaScript】Intl.DateTimeFormatのcalendarオプション

2年前にタイの日付に関して、Date#toLocaleDateStringをオプションなしで使うと仏暦になる問題に対して、localeにオプションを追記することで西暦にするということを行った

uga-box.hatenablog.com

そのときはlocaleth-THth-TH-u-ca-iso8601という文字列にすれば解決すると分かったが、そのすぐ後にV8のv8.1がリリースされ、もっとわかりやすく実装できるのを最近知ったので今更ながら調べた

v8のv8.1リリースも2020/2/25なのでほんと2年前の話だが、v8.1でIntl.DateTimeFormatcalendarオプションが有効化された

developer.mozilla.org

Date#toLocaleDateStringのオプションはIntl.DateTimeFormatのコンストラクタで指定できるオプションと同じなので、合わせてcalendarオプションが使えるようになった

このように使う

new Date.toLocaleDateString('th-TH', {calendar: 'iso8601'})

localeにth-TH-u-ca-iso8601という文字列を渡していたときのように、西暦にするためには何かしらの方法でiso8601を指定する必要があるが、Calendarオプションを使えばlocaleに追記する必要はなく、オプションとして渡すことができるようになった

当然、オプションなしの場合は仏暦になる

Calendarオプションに渡せる値は以下

"buddhist", "chinese", " coptic", "ethiopia", "ethiopic", "gregory", " hebrew", "indian", "islamic", "iso8601", " japanese", "persian", "roc"

日付の扱いに関してはJavaScriptが難儀なところが多いのでこういう機能更新はありがたい

引き続きウォッチしていきたい