dayjs.duration().format()で24時間以上を正しく扱う

やりたかったことはss秒をHH時間MM分という形式に変換して表示したかっただけ。

dayjsのdurationプラグインを使用して最初はこんな風に実装していた。

function formatDuration(seconds: number): string {
  return dayjs.duration(seconds, 'seconds').format('HH[時間]mm[分]');

だがしかし大きい秒数を指定すると表示がおかしくなることに気づいた。例えば100000秒を指定したら本来は27時間46分と表示してほしいのに3時間46分と表示されてしまうのだ。

24時間を1日とカウントしてしまうのね。

というわけで以下のような感じにした。他にもやりようはある気がする。

function formatDuration(seconds: number): string {
  const durationObject = dayjs.duration(seconds, 'seconds');
  const hours = Math.floor(durationObject.asHours());
  const minutes = durationObject.minutes();
  return `${hours}時間${minutes}分`;
}
©Keisuke Nishitani, 2023   プライバシーポリシー