moment-duration-formatである時刻からある時刻までの経過時間を整形
ある時刻からある時刻までの経過時間、英語でいうdurationの操作は、時刻の操作とは別の難しさがあります。時刻を文字列整形するJavaScriptのライブラリとしてはMoment.jsが有名ですが、これはdurationの文字列整形はできません。例えば、99時間経ったら"99:00:00"
のように表示したいとして、以下のように書いても上手くいきません。
const moment = require("moment");
moment(99 * 3600 * 1000).format("hh:mm:ss"); // 12:00:00
durationの文字列整形の方法をStackOverflowを漁ってみると独自に実装せいという意見がトップに来ます。しかし、見ると結構ややこしいので、何らかのライブラリを使いたいと思う人も多いのではないでしょうか。
そこで出てくるのがmoment-duration-formatです。このライブラリを使うと以下のように99時間経過したdurationを文字列整形できます。
const moment = require("moment");
require("moment-duration-format");
moment.duration(99 * 3600 * 1000, "ms").format("hh:mm:ss", { trim: false }); // 99:00:00
2行目のrequire
でmoment
オブジェクトにduration
メソッドが生えます。
format
の第2引数に{ trim: false }
を入れていますが、このオプションを入れると、例えば10秒経過していた場合、”00:00:10"
になります。デフォルトのtrue
だと"10"
になります。
また、類似ライブラリでtwix.jsがあります。これもmoment.jsのプラグインとして動作しますが、Dateオブジェクトを2つ受け取ってDurationを得るAPIになっているようです。