Upgrade to Pro — share decks privately, control downloads, hide ads and more …

本当はややこしい日時のFormatPattern

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Saji Saji
July 08, 2026
34

 本当はややこしい日時のFormatPattern

Avatar for Saji

Saji

July 08, 2026

More Decks by Saji

Transcript

  1. ⚠ 今回しない話 󰢃 • タイムゾーンの話 ◦ 時差の変換とかサマータイムとか • 暦にまつわる話 ◦

    非グレゴリウス暦の面倒なところなど • 人間の可読性特に考えなくて良い or 厳密なもの ◦ ISO8601 / RFC3339 とかの話
  2. 問題1: ライブラリ間互換性 ライブラリごとにFormatPatternのルールが微妙に違う JSのライブラリでは大きく2系統ある • Moment.js / Day.js 系 :

    YYYY/MM/DD パターン • date-fns / Luxion 系 : yyyy/MM/dd パターン ただ同じ系統でもそれぞれ微妙に受け入れるsymbolやパターンに差がある → 相互運用性に問題がある
  3. どれが正解なのか? (正解はある? ) 一番ちゃんとしていそうな仕様としてUnicodeのLDMLがある • Table: Date Field Symbol Table

    • ※ Unicodeは国際化における多くの仕様やデータセット・ライブラリを持つ date-fns はこのLDMLに準拠することを明言している > Format of the string is based on Unicode Technical Standard #35
  4. 問題3 : CLDRにもバージョンがある CLDRは常にupdateされている • 近年だと4月頃と10月頃にメジャーアップデートがある データ更新がある = フォーマット結果は変わりうる •

    (メジャーなロケールではそこまで多くないけど) すごく厳密なことを言い出すと... • 「OSやBEと参照しているCLDRを揃えたい」みたいなことになる
  5. つまり理想的には ... 以下があれば良い • pattern symbolはLDML準拠 • ロケールデータのデータソースはCLDR • ソースのCLDRバージョンは選べる

    • (とはいえサイズが大きすぎるのは勘弁....) そんなライブラリあるのか .....? (パッと調べた感じなかなかなさそう )
  6. 月のformatSymbol : MとL このような月の格変化に対応するため月を表すsymbolには • M : 日付のの中の月名を示す時 • L

    : 月名単体を表記する時 (standalone 形式と呼ばれる) の2種類が定義されている。 今回の例の場合 : • より広いロケールに対応することを見越すならLLLLの方が良い