diff --git a/web/ui/mantine-ui/src/lib/formatTime.ts b/web/ui/mantine-ui/src/lib/formatTime.ts index cfa553631..b0da19e99 100644 --- a/web/ui/mantine-ui/src/lib/formatTime.ts +++ b/web/ui/mantine-ui/src/lib/formatTime.ts @@ -83,30 +83,33 @@ export function parseTime(timeText: string): number { export const now = (): number => dayjs().valueOf(); export const humanizeDuration = (milliseconds: number): string => { - const sign = milliseconds < 0 ? "-" : ""; - const unsignedMillis = milliseconds < 0 ? -1 * milliseconds : milliseconds; - const duration = dayjs.duration(unsignedMillis, "ms"); + if (milliseconds === 0) { + return "0s"; + } + + const duration = dayjs.duration(Math.abs(milliseconds), "ms"); const ms = Math.floor(duration.milliseconds()); const s = Math.floor(duration.seconds()); const m = Math.floor(duration.minutes()); const h = Math.floor(duration.hours()); const d = Math.floor(duration.asDays()); + const parts: string[] = []; if (d !== 0) { - return `${sign}${d}d ${h}h ${m}m ${s}s`; + parts.push(`${d}d`); } if (h !== 0) { - return `${sign}${h}h ${m}m ${s}s`; + parts.push(`${h}h`); } if (m !== 0) { - return `${sign}${m}m ${s}s`; + parts.push(`${m}m`); } if (s !== 0) { - return `${sign}${s}.${ms}s`; + parts.push(`${s}s`); } - if (unsignedMillis > 0) { - return `${sign}${unsignedMillis.toFixed(3)}ms`; + if (ms !== 0) { + parts.push(`${ms}ms`); } - return "0s"; + return (milliseconds < 0 ? "-" : "") + parts.join(" "); }; export const formatRelative = (