diff --git a/src/__tests__/parse.spec.ts b/src/__tests__/parse.spec.ts index 48c8e88..50f4c68 100644 --- a/src/__tests__/parse.spec.ts +++ b/src/__tests__/parse.spec.ts @@ -278,4 +278,12 @@ describe("parse", () => { ).toISOString() ).toBe("1989-12-19T07:30:10.000Z") }) + it("parses an ISO date whose year is before 1000", () => { + // Regression: the `four` helper padded to 2 digits, so a valid + // zero-padded year like "0087" produced an invalid ISO string and + // parse() threw instead of returning the date. + const d = parse("0087-06-15", "YYYY-MM-DD") + expect(Number.isNaN(+d)).toBe(false) + expect(d.getUTCFullYear()).toBe(87) + }) }) diff --git a/src/common.ts b/src/common.ts index 92d911d..7982969 100644 --- a/src/common.ts +++ b/src/common.ts @@ -159,7 +159,7 @@ export const two = (n: number) => String(n).padStart(2, "0") * Creates a leading zero string of 4 digits. * @param n - A number. */ -export const four = (n: number) => String(n).padStart(2, "0") +export const four = (n: number) => String(n).padStart(4, "0") /** * Normalizes a given part to NFKC.