From d2c6cdb0eca0805136571f7f3e8929e26e374f4a Mon Sep 17 00:00:00 2001 From: Isaac Cambron Date: Sat, 16 Sep 2023 11:25:41 -0400 Subject: [PATCH] use ISO string when converting system zone to JS date --- src/datetime.js | 9 ++++++++- test/datetime/transform.test.js | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/datetime.js b/src/datetime.js index 40c1e6ae1..e0f5673b1 100644 --- a/src/datetime.js +++ b/src/datetime.js @@ -47,6 +47,7 @@ import { InvalidDateTimeError, } from "./errors.js"; import Invalid from "./impl/invalid.js"; +import SystemZone from "./zones/systemZone.js"; const INVALID = "Invalid DateTime"; const MAX_DATE = 8.64e15; @@ -1887,7 +1888,13 @@ export default class DateTime { * @return {Date} */ toJSDate() { - return new Date(this.isValid ? this.ts : NaN); + if (!this.isValid) { + return new Date(NaN); + } else if (this.zone == SystemZone.instance) { + return new Date(this.toISO({ includeOffset: false })); + } else { + return new Date(this.ts); + } } // COMPARE diff --git a/test/datetime/transform.test.js b/test/datetime/transform.test.js index 05656c345..cdb49424e 100644 --- a/test/datetime/transform.test.js +++ b/test/datetime/transform.test.js @@ -63,6 +63,12 @@ test("DateTime#toJSDate() returns a native Date equivalent", () => { expect(js.getTime()).toBe(dt.toMillis()); }); +test("DateTime#toJSDate() works for historic dates with weird offsets", () => { + const js = DateTime.fromISO("1800-01-01").toJSDate(); + expect(js).toBeInstanceOf(Date); + expect(js.getFullYear()).toBe(1800); +}); + //------ // #toBSON() //------