Open5

JavaScript 日付ライブラリの調査

えっつえっつ

調査対象(20230130 時点)

  • JavaScript 標準
  • Day.js
  • Date.js
  • date-fns
  • luxon
  • spacetime
  • moment.js
    • かつてのデファクトっぽいので比較用

調査内容

  • インストール
  • ライブラリサイズ
  • 準備
  • 現在の取得
  • 今日の取得
  • 文字列から日時・日付・時刻に変換
  • 日時・日付・時刻から文字列へ変換
  • 日時・日付・時刻から年・月・日・時・分・秒それぞれへの変換
  • 日時・日付・時刻の計算
    • 加減
  • タイムゾーン指定
えっつえっつ

えっつ目線で見たいこと

  • 分かり易さ
    • 直感的に扱えるか
  • 使う側の記述コード量
    • ライブラリに頼っているわけだから少ない方がいい
  • 困ったときのドキュメント
    • JSDoc
      • エディタの恩恵が受けられるので最低限欲しい
    • Web
      • コードよりも人間向けなはずなので有ると良い
    • ソース公開
      • JSDoc が無くて Web も無いときにコードリーディングで補う(ドキュメンテーションが遅いかもしれないし)
  • moment.js からのマイグレーション候補
えっつえっつ

なかなか書かないので、書ける場所をとりあえず作成。

えっつえっつ

Luxon を業務で使ったのでメモ。

luxon.DateTime で日時、luxon.Interval で日時から日時までの期間、luxon.Duration で期間といった感じで使った。

メリット

  • Immutable なオブジェクトとして扱ってくれるので、同じオブジェクトを変更しちゃうミスは無い。
  • ある期間の Interval 同士で和集合や積集合が取得できるのが便利
    • 「実勤務時間は、定時内でどれだけか?」を調べるのに「部品を作って計算」しなくても積集合だけで済む
  • moment で書かれたコードを Luxon で書き直したらスッキリした

デメリット

デメリットはまだ感じてない。
オブジェクトが増えやすいのでパフォーマンスに影響しないかってところが気になる。

限定的なデメリットとしては、moment.js からの移行で API の差がちょいめんどいところかな。

評価

  • 分かり易さ: 良好
    • DateTime.fromFormat(), DateTime.toFormat() といったように何から、何へがまんま書いてあるので間違えない
      • 形式も十分かと思う。
  • 使う側の記述コード量: 良好
  • 困ったときのドキュメント: 良好
    • JSDoc: 有
    • Web: 有
    • ソース公開: 有