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

続・moment.jsからday.jsに乗り換え

続・moment.js から day.js に書き換えた

昨日の記事で moment.js から day.js に書き換えたことを書いたんだけど、その続編。

一応 moment が使われているところは grep して洗い出して、利用しているところに必要なプラグインを import して問題なく移行したつもりでいたんだけど、CI でテストがコケた。

テストがコケた箇所から呼ばれている部分をよく読んでみたり day.js のドキュメントを読んだりして解決したのでメモしておく。

IsoWeek

new Date(moment(date).startOf('isoWeek'))

というコードの部分がコケているっぽいというのがわかったので day.js のドキュメントを確認しにいった。

IsoWeek · Day.js

moment オブジェクトから直接呼んでいる部分(moment().isoWeek()みたいなやつ)があるわけではないので、ここではなさそうだと思ってstartOfのページを見に行ったらあった。

Start of Time · Day.js

'isoWeek'という単位を渡す場合は上記のIsoWeekプラグインに依存しているらしい。

今回は使わなかったけど、'quarter'という単位を渡す場合もQuarterOfYearというプラグインを入れなければいけないらしい。

CustomParseFormat

const time = moment(date, 'HH:mm:ss')

というコードが問題となってテストが落ちていた。

一見特に問題なさそうなんだけど、どうやら第二引数にフォーマットを渡す場合は独自フォーマットということになり、CustomeParseFormatというプラグインが必要らしい。

これ、よく考えたら普通に.format('HH:mm:ss')でよさそうだしプラグインいらない気がしてきた。

まとめ

テストがあって本当によかった。テストを書いてくれた方々に圧倒的な感謝。

あと day.js は軽量化のためとはいえプラグイン化しすぎな気がする……。