fujjima’s blog

主に備忘録

dayjsのduration.format()まだマージされていない

JS系で、時間・日時を取り扱うライブラリにdayjsというものがある。(他の有名どころだとMoment.js1とか)

day.js.org

ある時、formatを使って秒数を「HH:mm:ss」の形式で表現したくなった。 例えば、144,930秒で表現すると「40:15:30」となる。

momentだと上記のようなケースに対応したライブラリがある。

GitHub - jsmreese/moment-duration-format: Format function plugin for the Moment Duration object.

momentと似た感じで、 dayjs.duration({ seconds: time }).format('HH:mm:ss') ※timeは任意の秒数 でフォーマットできないかと思ったけど、まだdurationでformatは使えないらしい。 ただ、最近devブランチに duration().formatを使えるようにしたブランチがマージされたらしいので、これがmasterにマージされれば晴れて上記のようなフォーマットができるようになると思われる。

github.com

ちなみに、dayjs()で生成したものにシンプルにformatを使用しただけだと、24時間ごとに一日とカウントされ、24時間以上のカウントには対応できない。

const time = 144930 * 1000  // dayjs(time)のtimeはミリ秒で計算されるため、秒数をミリ秒に変換している
dayjs(time).format('HH:mm:ss')

=> 16:15:30


2021/2/11追記

どうやら上記のような対応の予定は無いらしい。 残念。

Request - Format duration days as more than 24h · Issue #1376 · iamkun/dayjs · GitHub


  1. ただし、Moment.jsは近い将来新しい開発が停止になるそう cpoint-lab.co.jp