diff --git a/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts b/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts index 259d557b..9b73e6cf 100644 --- a/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts +++ b/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts @@ -10,10 +10,10 @@ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/ // prettier-ignore const PATTERN = new RegExp( `(?:on\\s{0,3})?` + - `(${ORDINAL_NUMBER_PATTERN})` + + `(${ORDINAL_NUMBER_PATTERN})\\.?` + `(?:` + `\\s{0,3}(?:to|\\-|\\–|until|through|till)\\s{0,3}` + - `(${ORDINAL_NUMBER_PATTERN})` + + `(${ORDINAL_NUMBER_PATTERN})\\.?` + ")?" + `(?:-|/|\\s{0,3}(?:of)?\\s{0,3})` + `(${matchAnyPattern(MONTH_DICTIONARY)})` + diff --git a/test/en/en_month_name_little_endian.test.ts b/test/en/en_month_name_little_endian.test.ts index b643152a..1ae12eb1 100644 --- a/test/en/en_month_name_little_endian.test.ts +++ b/test/en/en_month_name_little_endian.test.ts @@ -461,3 +461,48 @@ test("Test - Year 3000+ support (Issue #636)", () => { expect(result.start).toBeDate(new Date(2025, 1 - 1, 1, 9, 30)); }); }); + +test("Test - Day number followed by a dot (Issue #283)", () => { + testSingleCase(chrono, "5. March 2019, 03:26 PM EDT", new Date(2019, 2, 1), (result) => { + expect(result.index).toBe(0); + expect(result.text).toBe("5. March 2019, 03:26 PM EDT"); + + expect(result.start.get("year")).toBe(2019); + expect(result.start.get("month")).toBe(3); + expect(result.start.get("day")).toBe(5); + expect(result.start.get("hour")).toBe(15); + expect(result.start.get("minute")).toBe(26); + expect(result.start.get("timezoneOffset")).toBe(-240); + }); + + testSingleCase(chrono, "23. October 2026", new Date(2026, 9, 17), (result) => { + expect(result.index).toBe(0); + expect(result.text).toBe("23. October 2026"); + + expect(result.start.get("year")).toBe(2026); + expect(result.start.get("month")).toBe(10); + expect(result.start.get("day")).toBe(23); + expect(result.start.isCertain("hour")).toBe(false); + + expect(result.start).toBeDate(new Date(2026, 10 - 1, 23, 12)); + }); + + testSingleCase(chrono, "The Deadline is 10. August", new Date(2012, 7, 10), (result) => { + expect(result.index).toBe(16); + expect(result.text).toBe("10. August"); + + expect(result.start.get("year")).toBe(2012); + expect(result.start.get("month")).toBe(8); + expect(result.start.get("day")).toBe(10); + + expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12)); + }); + + testSingleCase(chrono, "10. - 22. August 2012", new Date(2012, 7, 10), (result) => { + expect(result.index).toBe(0); + expect(result.text).toBe("10. - 22. August 2012"); + + expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12)); + expect(result.end).toBeDate(new Date(2012, 8 - 1, 22, 12)); + }); +});