From 1f99fdd36c60a5c93cd778861515e2f369e27ea5 Mon Sep 17 00:00:00 2001 From: Isaac Cambron Date: Fri, 2 Jul 2021 18:22:55 -0400 Subject: [PATCH] fix ISO year-ordinal strings with offsets (#966) Fixes #892 --- scripts/bootstrap.js | 1 + src/impl/regexParser.js | 8 ++++++-- test/datetime/regexParse.test.js | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/scripts/bootstrap.js b/scripts/bootstrap.js index f1b4c80b0..bcb64814b 100644 --- a/scripts/bootstrap.js +++ b/scripts/bootstrap.js @@ -4,3 +4,4 @@ global.Duration = luxon.Duration; global.Interval = luxon.Interval; global.Settings = luxon.Settings; global.Info = luxon.Info; +global.IANAZone = luxon.IANAZone; diff --git a/src/impl/regexParser.js b/src/impl/regexParser.js index 8e4308b61..0b0297b1f 100644 --- a/src/impl/regexParser.js +++ b/src/impl/regexParser.js @@ -267,7 +267,11 @@ const extractISOWeekTimeAndOffset = combineExtractors( extractISOTime, extractISOOffset ); -const extractISOOrdinalDataAndTime = combineExtractors(extractISOOrdinalData, extractISOTime); +const extractISOOrdinalDateAndTime = combineExtractors( + extractISOOrdinalData, + extractISOTime, + extractISOOffset +); const extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset); /** @@ -279,7 +283,7 @@ export function parseISODate(s) { s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], - [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDataAndTime], + [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset] ); } diff --git a/test/datetime/regexParse.test.js b/test/datetime/regexParse.test.js index 10f8c1598..5d6558879 100644 --- a/test/datetime/regexParse.test.js +++ b/test/datetime/regexParse.test.js @@ -435,6 +435,20 @@ test("DateTime.fromISO() accepts year-ordinalTtime", () => { }); }); +test("DateTime.fromISO() accepts year-ordinalTtime+offset", () => { + const dt = DateTime.fromISO("2016-200T09:24:15.123+0600", { setZone: true }); + expect(dt.zone.name).toBe("UTC+6"); + expect(dt.toObject()).toEqual({ + year: 2016, + month: 7, + day: 18, + hour: 9, + minute: 24, + second: 15, + millisecond: 123 + }); +}); + test("DateTime.fromISO() accepts hour:minute:second.millisecond", () => { const { year, month, day } = DateTime.now(); isSame("09:24:15.123", {