From 1804fb3e5038b7582df730c9590fec4f6b537c58 Mon Sep 17 00:00:00 2001 From: Deluan <deluan@navidrome.org> Date: Sun, 20 Dec 2020 13:29:09 -0500 Subject: [PATCH] Fix duration formatting, add days and don't show 60 seconds --- ui/src/utils/formatters.js | 11 +++++++---- ui/src/utils/formatters.test.js | 10 ++++++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/ui/src/utils/formatters.js b/ui/src/utils/formatters.js index 3702c5d70..3474f5cb7 100644 --- a/ui/src/utils/formatters.js +++ b/ui/src/utils/formatters.js @@ -11,12 +11,15 @@ export const formatBytes = (bytes, decimals = 2) => { } export const formatDuration = (d) => { - const hours = Math.floor(d / 3600) + const days = Math.floor(d / 86400) + const hours = Math.floor(d / 3600) % 24 const minutes = Math.floor(d / 60) % 60 - const seconds = d % 60 - return [hours, minutes, seconds] - .map((v) => Math.round(v).toString()) + const seconds = Math.floor(d % 60) + const f = [hours, minutes, seconds] + .map((v) => v.toString()) .map((v) => (v.length !== 2 ? '0' + v : v)) .filter((v, i) => v !== '00' || i > 0) .join(':') + + return `${days > 0 ? days + ':' : ''}${f}` } diff --git a/ui/src/utils/formatters.test.js b/ui/src/utils/formatters.test.js index 0cb8c94af..3beed2088 100644 --- a/ui/src/utils/formatters.test.js +++ b/ui/src/utils/formatters.test.js @@ -18,10 +18,16 @@ const hour = 3600 const minute = 60 describe('formatDuration', () => { - it('format seconds', () => { + it('formats seconds', () => { expect(formatDuration(0)).toEqual('00:00') expect(formatDuration(59)).toEqual('00:59') + expect(formatDuration(59.99)).toEqual('00:59') + }) + + it('formats days, hours and minutes', () => { expect(formatDuration(hour + minute + 1)).toEqual('01:01:01') - expect(formatDuration(2 * day + 3 * hour + 7 * minute)).toEqual('51:07:00') + expect(formatDuration(3 * day + 3 * hour + 7 * minute)).toEqual( + '3:03:07:00' + ) }) })