From 8caec2a1fbf90eb20e55b79959d47575002928d5 Mon Sep 17 00:00:00 2001 From: Yash Lahase Date: Wed, 3 Dec 2025 00:44:17 +0530 Subject: [PATCH] fix: correct moment.js duration formatting in format-time utilities The formatTime function incorrectly used moment().millisecond() which only sets the millisecond component (0-999), not total milliseconds. This could cause incorrect time formatting for durations over 1 second. Replace millisecond(time * 1000) with add(time, 'seconds') to properly add the duration to a moment at the start of the day. Fixes incorrect behavior in: - main/utils/format-time.ts - renderer/utils/format-time.js Adds comprehensive test coverage in test/format-time.ts --- main/utils/format-time.ts | 2 +- renderer/utils/format-time.js | 2 +- test/format-time.ts | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 test/format-time.ts diff --git a/main/utils/format-time.ts b/main/utils/format-time.ts index 452b26844..5dfdbedc2 100644 --- a/main/utils/format-time.ts +++ b/main/utils/format-time.ts @@ -16,7 +16,7 @@ const formatTime = (time: number, options: any) => { const format = (time: number, {showMilliseconds} = {showMilliseconds: false}) => { const formatString = `${time >= 60 * 60 ? 'hh:m' : ''}m:ss${showMilliseconds ? '.SS' : ''}`; - return moment().startOf('day').millisecond(time * 1000).format(formatString); + return moment().startOf('day').add(time, 'seconds').format(formatString); }; export default formatTime; diff --git a/renderer/utils/format-time.js b/renderer/utils/format-time.js index 161dc19fc..72b1d2487 100644 --- a/renderer/utils/format-time.js +++ b/renderer/utils/format-time.js @@ -16,7 +16,7 @@ const formatTime = (time, options) => { const format = (time, {showMilliseconds} = {}) => { const formatString = `${time >= 60 * 60 ? 'hh:m' : ''}m:ss${showMilliseconds ? '.SS' : ''}`; - return moment().startOf('day').millisecond(time * 1000).format(formatString); + return moment().startOf('day').add(time, 'seconds').format(formatString); }; export default formatTime; diff --git a/test/format-time.ts b/test/format-time.ts new file mode 100644 index 000000000..084cea740 --- /dev/null +++ b/test/format-time.ts @@ -0,0 +1,33 @@ +import test from 'ava'; +import formatTime from '../main/utils/format-time'; + +test('formatTime formats seconds correctly', t => { + t.is(formatTime(0), '0:00'); + t.is(formatTime(5), '0:05'); + t.is(formatTime(30), '0:30'); + t.is(formatTime(65), '1:05'); + t.is(formatTime(125), '2:05'); +}); + +test('formatTime formats minutes and seconds correctly', t => { + t.is(formatTime(60), '1:00'); + t.is(formatTime(90), '1:30'); + t.is(formatTime(3665), '61:05'); +}); + +test('formatTime formats hours correctly', t => { + t.is(formatTime(3600), '1:0:00'); + t.is(formatTime(3661), '1:1:01'); + t.is(formatTime(7325), '2:2:05'); +}); + +test('formatTime shows milliseconds when requested', t => { + const result = formatTime(65.123, {showMilliseconds: true}); + t.is(result, '1:05.12'); +}); + +test('formatTime handles extra time correctly', t => { + const result = formatTime(65, {extra: 30}); + t.is(result, '1:05 (0:30)'); +}); +