From f71f3c9d702b8dec441f927800eb86472ede9443 Mon Sep 17 00:00:00 2001 From: Rahul Pratik Date: Wed, 3 Jun 2026 16:09:41 -0700 Subject: [PATCH] fix: pad millisecs to 3 digits --- src/index.js | 2 +- test/issues/issue1331.millisec-pad.test.js | 35 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 test/issues/issue1331.millisec-pad.test.js diff --git a/src/index.js b/src/index.js index 061ade178..ad339bb02 100644 --- a/src/index.js +++ b/src/index.js @@ -69,7 +69,7 @@ const parseDate = (cfg) => { const d = date.match(C.REGEX_PARSE) if (d) { const m = d[2] - 1 || 0 - const ms = (d[7] || '0').substring(0, 3) + const ms = (d[7] || '0').padEnd(3, '0').substring(0, 3) if (utc) { return new Date(Date.UTC(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms)) diff --git a/test/issues/issue1331.millisec-pad.test.js b/test/issues/issue1331.millisec-pad.test.js new file mode 100644 index 000000000..826a2dc6c --- /dev/null +++ b/test/issues/issue1331.millisec-pad.test.js @@ -0,0 +1,35 @@ +import dayjs from '../../src' + +describe('milliseconds padding bug (Issue #1331)', () => { + it('parses 2-digit milliseconds correctly (.52 should be 520ms not 52ms)', () => { + const timestamp = '2026-01-01T10:00:00.52' + const expected = new Date(timestamp).getTime() + const actual = dayjs(timestamp).valueOf() + + expect(actual).toBe(expected) + }) + + it('parses 1-digit milliseconds correctly (.3 should be 300ms not 3ms)', () => { + const timestamp = '2026-01-01T10:00:00.3' + const expected = new Date(timestamp).getTime() + const actual = dayjs(timestamp).valueOf() + + expect(actual).toBe(expected) + }) + + it('parses 3-digit milliseconds correctly (existing behavior)', () => { + const timestamp = '2026-01-01T10:00:00.620' + const expected = new Date(timestamp).getTime() + const actual = dayjs(timestamp).valueOf() + + expect(actual).toBe(expected) + }) + + it('handles missing milliseconds', () => { + const timestamp = '2026-01-01T10:00:00' + const expected = new Date(timestamp).getTime() + const actual = dayjs(timestamp).valueOf() + + expect(actual).toBe(expected) + }) +})