diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/TimeZone.cpp b/Userland/Libraries/LibJS/Runtime/Temporal/TimeZone.cpp index 6a36fe25ad..49f01915f8 100644 --- a/Userland/Libraries/LibJS/Runtime/Temporal/TimeZone.cpp +++ b/Userland/Libraries/LibJS/Runtime/Temporal/TimeZone.cpp @@ -121,7 +121,7 @@ ISODateTime get_iso_parts_from_epoch(BigInt const& epoch_nanoseconds) // 1. Assert: epochNanoseconds is an integer. // 2. Let remainderNs be epochNanoseconds modulo 10^6. - auto remainder_ns_bigint = epoch_nanoseconds.big_integer().divided_by(Crypto::UnsignedBigInteger { 1'000'000 }).remainder; + auto remainder_ns_bigint = modulo(epoch_nanoseconds.big_integer(), Crypto::UnsignedBigInteger { 1'000'000 }); auto remainder_ns = remainder_ns_bigint.to_double(); // 3. Let epochMilliseconds be (epochNanoseconds − remainderNs) / 10^6. diff --git a/Userland/Libraries/LibJS/Tests/builtins/Temporal/ZonedDateTime/ZonedDateTime.prototype.toString.js b/Userland/Libraries/LibJS/Tests/builtins/Temporal/ZonedDateTime/ZonedDateTime.prototype.toString.js index dcf99a0656..cde4759c06 100644 --- a/Userland/Libraries/LibJS/Tests/builtins/Temporal/ZonedDateTime/ZonedDateTime.prototype.toString.js +++ b/Userland/Libraries/LibJS/Tests/builtins/Temporal/ZonedDateTime/ZonedDateTime.prototype.toString.js @@ -10,6 +10,12 @@ describe("correct behavior", () => { expect(zonedDateTime.toString()).toBe("2021-11-03T01:33:05.1002003+00:00[UTC]"); }); + test("negative epoch nanoseconds", () => { + const timeZone = new Temporal.TimeZone("UTC"); + const zonedDateTime = new Temporal.ZonedDateTime(-999_999_999n, timeZone); + expect(zonedDateTime.toString()).toBe("1969-12-31T23:59:59.000000001+00:00[UTC]"); + }); + test("fractionalSecondDigits option", () => { const plainDateTime = new Temporal.PlainDateTime(2021, 11, 3, 1, 33, 5, 100, 200, 300); const timeZone = new Temporal.TimeZone("UTC");