1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 07:37:46 +00:00

LibJS: Adjust ISO8601 representation for years between 1 BCE and 999 CE

This is a normative change in the Temporal spec.

See: 39eeecd
This commit is contained in:
Linus Groh 2022-03-31 00:54:27 +01:00
parent cfb04765fa
commit 8e175b4959
3 changed files with 17 additions and 10 deletions

View file

@ -499,13 +499,14 @@ String pad_iso_year(i32 y)
{ {
// 1. Assert: y is an integer. // 1. Assert: y is an integer.
// 2. If y > 999 and y ≤ 9999, then // 2. If y ≥ 0 and y ≤ 9999, then
if (y > 999 && y <= 9999) { if (y >= 0 && y <= 9999) {
// a. Return y formatted as a four-digit decimal number. // a. Return y formatted as a four-digit decimal number, padded to the left with zeroes as necessary.
return String::number(y); return String::formatted("{:04}", y);
} }
// 3. If y ≥ 0, let yearSign be "+"; otherwise, let yearSign be "-".
auto year_sign = y >= 0 ? '+' : '-'; // 3. If y > 0, let yearSign be "+"; otherwise, let yearSign be "-".
auto year_sign = y > 0 ? '+' : '-';
// 4. Let year be abs(y), formatted as a six-digit decimal number, padded to the left with zeroes as necessary. // 4. Let year be abs(y), formatted as a six-digit decimal number, padded to the left with zeroes as necessary.
// 5. Return the string-concatenation of yearSign and year. // 5. Return the string-concatenation of yearSign and year.

View file

@ -19,10 +19,13 @@ describe("correct behavior", () => {
expect(plainDate.toString({ calendarName: "never" })).toBe("2021-07-06"); expect(plainDate.toString({ calendarName: "never" })).toBe("2021-07-06");
plainDate = new Temporal.PlainDate(0, 1, 1); plainDate = new Temporal.PlainDate(0, 1, 1);
expect(plainDate.toString()).toBe("+000000-01-01"); expect(plainDate.toString()).toBe("0000-01-01");
plainDate = new Temporal.PlainDate(999, 1, 1); plainDate = new Temporal.PlainDate(999, 1, 1);
expect(plainDate.toString()).toBe("+000999-01-01"); expect(plainDate.toString()).toBe("0999-01-01");
plainDate = new Temporal.PlainDate(9999, 1, 1);
expect(plainDate.toString()).toBe("9999-01-01");
plainDate = new Temporal.PlainDate(12345, 1, 1); plainDate = new Temporal.PlainDate(12345, 1, 1);
expect(plainDate.toString()).toBe("+012345-01-01"); expect(plainDate.toString()).toBe("+012345-01-01");

View file

@ -21,10 +21,13 @@ describe("correct behavior", () => {
expect(plainYearMonth.toString({ calendarName: "never" })).toBe("2021-07-06"); expect(plainYearMonth.toString({ calendarName: "never" })).toBe("2021-07-06");
plainYearMonth = new Temporal.PlainYearMonth(0, 1); plainYearMonth = new Temporal.PlainYearMonth(0, 1);
expect(plainYearMonth.toString()).toBe("+000000-01"); expect(plainYearMonth.toString()).toBe("0000-01");
plainYearMonth = new Temporal.PlainYearMonth(999, 1); plainYearMonth = new Temporal.PlainYearMonth(999, 1);
expect(plainYearMonth.toString()).toBe("+000999-01"); expect(plainYearMonth.toString()).toBe("0999-01");
plainYearMonth = new Temporal.PlainYearMonth(9999, 1);
expect(plainYearMonth.toString()).toBe("9999-01");
plainYearMonth = new Temporal.PlainYearMonth(12345, 1); plainYearMonth = new Temporal.PlainYearMonth(12345, 1);
expect(plainYearMonth.toString()).toBe("+012345-01"); expect(plainYearMonth.toString()).toBe("+012345-01");