Open5
JavaScript 日付ライブラリの調査
調査対象(20230130 時点)
- JavaScript 標準
- Day.js
- Date.js
- date-fns
- luxon
- spacetime
- moment.js
- かつてのデファクトっぽいので比較用
調査内容
- インストール
- ライブラリサイズ
- 準備
- 現在の取得
- 今日の取得
- 文字列から日時・日付・時刻に変換
- 日時・日付・時刻から文字列へ変換
- 日時・日付・時刻から年・月・日・時・分・秒それぞれへの変換
- 日時・日付・時刻の計算
- 加減
- タイムゾーン指定
えっつ目線で見たいこと
- 分かり易さ
- 直感的に扱えるか
- 使う側の記述コード量
- ライブラリに頼っているわけだから少ない方がいい
- 困ったときのドキュメント
- JSDoc
- エディタの恩恵が受けられるので最低限欲しい
- Web
- コードよりも人間向けなはずなので有ると良い
- ソース公開
- JSDoc が無くて Web も無いときにコードリーディングで補う(ドキュメンテーションが遅いかもしれないし)
- JSDoc
- moment.js からのマイグレーション候補
なかなか書かないので、書ける場所をとりあえず作成。
Cloudflare Pages で動かせる形で考えよ、とおもったので下記に作業記録
Luxon を業務で使ったのでメモ。
luxon.DateTime
で日時、luxon.Interval
で日時から日時までの期間、luxon.Duration
で期間といった感じで使った。
メリット
- Immutable なオブジェクトとして扱ってくれるので、同じオブジェクトを変更しちゃうミスは無い。
- ある期間の Interval 同士で和集合や積集合が取得できるのが便利
- 「実勤務時間は、定時内でどれだけか?」を調べるのに「部品を作って計算」しなくても積集合だけで済む
- moment で書かれたコードを Luxon で書き直したらスッキリした
デメリット
デメリットはまだ感じてない。
オブジェクトが増えやすいのでパフォーマンスに影響しないかってところが気になる。
限定的なデメリットとしては、moment.js からの移行で API の差がちょいめんどいところかな。
評価
- 分かり易さ: 良好
-
DateTime.fromFormat()
,DateTime.toFormat()
といったように何から、何へがまんま書いてあるので間違えない- 形式も十分かと思う。
-
- 使う側の記述コード量: 良好
- 困ったときのドキュメント: 良好
- JSDoc: 有
- Web: 有
- ソース公開: 有