From 094f9bf6a274f17fe602f11414deb9f96077f86b Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Sat, 15 Oct 2022 22:40:27 +0200 Subject: [PATCH] LibJS: Subtract time zone offsets when converting from local time to UTC When converting to UTC, the UTC AO first tries to disambiguate possible time zone offsets for the given local time. When doing so, the GetNamedTimeZoneEpochNanoseconds AO must *subtract* the found time zone offset from the local time to convert to UTC. The same is performed later in the UTC AO when returning the final UTC time (step 5). --- Userland/Libraries/LibJS/Runtime/Date.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Userland/Libraries/LibJS/Runtime/Date.cpp b/Userland/Libraries/LibJS/Runtime/Date.cpp index 6216433efca..de4fb4cbbfe 100644 --- a/Userland/Libraries/LibJS/Runtime/Date.cpp +++ b/Userland/Libraries/LibJS/Runtime/Date.cpp @@ -342,7 +342,7 @@ Vector get_named_time_zone_epoch_nanoseconds(StringVie // Can only fail if the time zone identifier is invalid, which cannot be the case here. VERIFY(offset.has_value()); - return { local_nanoseconds.plus(Crypto::SignedBigInteger { offset->seconds }.multiplied_by(s_one_billion_bigint)) }; + return { local_nanoseconds.minus(Crypto::SignedBigInteger { offset->seconds }.multiplied_by(s_one_billion_bigint)) }; } // 21.4.1.9 GetNamedTimeZoneOffsetNanoseconds ( timeZoneIdentifier, epochNanoseconds ), https://tc39.es/ecma262/#sec-getnamedtimezoneoffsetnanoseconds