技術とかの雑なToday I Learnedメモ

日付のライブラリをどれにするか問題

日付ライブラリどれにするか

JS の日時操作ライブラリを比較する: date-fns のインターフェイスがイカす - マンガ〜ノ伊藤ノ〜ト

会社のプロダクトで moment.js を使っているのだけど、moment.js は去年にメンテナンスモードに移行して新機能追加がなくなり利用非推奨となったので、新しいライブラリに替えたいと思って調べている。

移行のしやすさだと moment.js とほぼ同じ API を持つ day.js かなと思いつつ、date-fns も面白い感じなのでいいなと思っている。

Luxon は moment.js のチームが開発しているのでこれこそ正統後継なのかなと思いきやそうでもないっぽい。

それぞれの書き味は以下のような感じ

//day.js
import dayjs from 'dayjs'
const formattedDate = dayjs('2021-07-15').format('YYYY-MM-DD')

// date-fns
import format from 'date-fns'
const formattedDate = format(new Date('2021-07-15'), 'YYYY-MM-dd')

// Luxon
import Datetime from 'luxon/src/datetime.js'
const formattedDate = DateTime.fromISO('2021-07-15')

day.js が mmoment.js と同じような感じ、date-fns は lodash チックな感じ、Luxon はオブジェクト指向なライブラリという感じ。

date-fns は JavaScript の標準組み込みライブラリの Date 型に対するヘルパーを提供するような感覚で、Date を拡張してラップした Moment や DayJs のような型はないらしい。

もちろんこれだけだと比較はできないが、moment.js を利用している状態で置き換えるのであれば day.js が最も移行コストが少なそうだなと思う。

移行とコードの質は別物と考えなくてはいけないので、移行はするとして、その後のコードベースをどのようにしたいかでも変わってきそう。date-fns は個人的に分かりやすくていいなと思う。けどこれはチームのプロダクトの話なので、個人の意見だけで決めてはいけない。

以下リンク

iamkun/dayjs: ⏰ Day.js 2kB immutable date-time library alternative to Moment.js with the same modern API

date-fns/date-fns: ⏳ Modern JavaScript date utility library ⌛️

moment/luxon: ⏱ A library for working with dates and times in JS

day.js は日本語の README があって助かる。まあ英語読めるようになるのが最もいいんですが……

dayjs/README-ja.md at dev · iamkun/dayjs