UGA Boxxx

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

【I18N】moment.jsを使わないで「年月」のローカライズ

前回の記事の続きで、以下のように日付の年月だけをローカライズさせる方法を調べている

2020年 1月 January 2020

uga-box.hatenablog.com

前回の記事で、moment.jsでは表現が簡単にはできないことがわかり困っていたところ、
twitter@kawasimaさんよりDate#toLocaleDateStringを紹介いただいた

ということで、Date#toLocaleDateStringを試してみる

developer.mozilla.org

使い方は下のように第一引数にlocale、第二引数にoptionsを指定して使う

new Date().toLocaleDateString('ja-JP', { year: 'numeric', month: 'long' })

ただし、古いブラウザーはこの2つの引数に対応していないようなので、ブラウザの対応状況に注意

optionsには以下のプロパティが使用できる
Intl.DateTimeFormat - JavaScript | MDNより抜粋)

  • weekday: 曜日の表現です。利用可能な値は以下の通りです。
    • "long" (例 Thursday)
    • "short" (例 Thu)
    • "narrow" (例 T)。ロケールによっては、 narrow 形式が同じ曜日が2つある場合もあります (例 Tuesday の narrow 形式も T です)。
  • era: 時代の表現です。利用可能な値は以下の通りです。
    • "long" (例 Anno Domini, 紀元)
    • "short" (例 AD)
    • "narrow" (例 A)
  • year: 年の表現です。利用可能な値は以下の通りです。
    • "numeric" (例 2012)
    • "2-digit" (例 12)
  • month: 月の表現です。利用可能な値は以下の通りです。
    • "numeric" (例 2)
    • "2-digit" (例 02)
    • "long" (例 March)
    • "short" (例 Mar)
    • "narrow" (例 M)。ロケールによっては、 narrow 形式が同じ月が2つある場合もあります (例 May の narrow 形式も M です)。
  • day: 日の表現です。利用可能な値は以下の通りです。
    • "numeric" (例 1)
    • "2-digit" (例 01)
  • hour: 時の表現です。利用可能な値は "numeric", "2-digit" です。
  • minute: 分の表現です。利用可能な値は "numeric", "2-digit" です。
  • second: 秒の表現です。利用可能な値は "numeric", "2-digit" です。
  • timeZoneName: タイムゾーン名の表現です。利用可能な値は以下の通りです。
    • "long" (例 British Summer Time)
    • "short" (例 GMT+1)

今回表現したいのは年月のみの8言語

const event = new Date(Date.UTC(2020, 0, 20));
const options = { year: 'numeric', month: 'long' };
console.log(event.toLocaleDateString('en-US', options));
console.log(event.toLocaleDateString('ja-JP', options));
console.log(event.toLocaleDateString('ko-KR', options));
console.log(event.toLocaleDateString('zh-TW', options));
console.log(event.toLocaleDateString('ms-MY', options));
console.log(event.toLocaleDateString('in-ID', options));
console.log(event.toLocaleDateString('vi-VN', options));
console.log(event.toLocaleDateString('th-TH', options));
> "January 2020"
> "2020年1月"
> "2020년 1월"
> "2020年1月"
> "Januari 2020"
> "Januari 2020"
> "tháng 1 năm 2020"
> "มกราคม 2563"

バッチリなんだけど、タイ語だけおかしい?
มกราคม 2563

調べたらこれは仏暦でタイの公用暦らしい

西暦+543年が仏暦なんだとか

脱線したけど、これで問題なさそう