From 41b1405971e099431211ae6c2a100cd797da4427 Mon Sep 17 00:00:00 2001 From: Bernhard P <6582465+BePo65@users.noreply.github.com> Date: Sat, 4 Jun 2022 16:56:32 +0200 Subject: [PATCH] fix: customParseFormat plugin to parse comma as a separator character (#1913) --- CHANGELOG.md | 9 +++++ src/plugin/customParseFormat/index.js | 4 +- test/plugin/customParseFormat.test.js | 55 +++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3190aa8c..201c821b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## [1.11.2](https://github.com/iamkun/dayjs/compare/v1.11.1...v1.11.2) (2022-05-06) + + +### Bug Fixes + +* add OpUnitType (week) to quarterOfYear startOf/endOf types ([#1865](https://github.com/iamkun/dayjs/issues/1865)) ([400bc3e](https://github.com/iamkun/dayjs/commit/400bc3e8915e0c58e7abbfd3a1235364b1abaf3e)) +* Fix type issue with ManipulateType ([#1864](https://github.com/iamkun/dayjs/issues/1864)) ([d033dfc](https://github.com/iamkun/dayjs/commit/d033dfcfc1d2ced39b2733898e8d85ad5984c9e9)) +* fix UTC plugin .valueOf not taking DST into account ([#1448](https://github.com/iamkun/dayjs/issues/1448)) ([27d1c50](https://github.com/iamkun/dayjs/commit/27d1c506100ae6624f258c21cc06b24768ced733)) + ## [1.11.1](https://github.com/iamkun/dayjs/compare/v1.11.0...v1.11.1) (2022-04-15) diff --git a/src/plugin/customParseFormat/index.js b/src/plugin/customParseFormat/index.js index f662a4ab8..771d13106 100644 --- a/src/plugin/customParseFormat/index.js +++ b/src/plugin/customParseFormat/index.js @@ -1,6 +1,6 @@ import { u } from '../localizedFormat/utils' -const formattingTokens = /(\[[^[]*\])|([-:/.()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g +const formattingTokens = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g const match1 = /\d/ // 0 - 9 const match2 = /\d\d/ // 00 - 99 @@ -9,7 +9,7 @@ const match4 = /\d{4}/ // 0000 - 9999 const match1to2 = /\d\d?/ // 0 - 99 const matchSigned = /[+-]?\d+/ // -inf - inf const matchOffset = /[+-]\d\d:?(\d\d)?|Z/ // +00:00 -00:00 +0000 or -0000 +00 or Z -const matchWord = /\d*[^\s\d-_:/()]+/ // Word +const matchWord = /\d*[^-_:/,()\s\d]+/ // Word let locale = {} diff --git a/test/plugin/customParseFormat.test.js b/test/plugin/customParseFormat.test.js index 3b4e5f9cb..a4588e976 100644 --- a/test/plugin/customParseFormat.test.js +++ b/test/plugin/customParseFormat.test.js @@ -370,6 +370,61 @@ it('custom two-digit year parse function', () => { expect(dayjs(input3, format).year()).toBe(1899) }) +// issue 1852 +describe('parse with special separator characters', () => { + it('Output is NaN for a specific date format', () => { + const input = '20 Nov, 2022' + const format = 'DD MMM, YYYY' + const locale = 'en' + const resultDayjs = dayjs(input, format, locale) + const resultMoment = moment(input, format, locale) + expect(resultMoment.isValid()).toBe(true) + expect(resultDayjs.isValid()).toBe(true) + expect(resultDayjs.format('DD-MM-YYYY')).toBe('20-11-2022') + expect(resultMoment.format('DD-MM-YYYY')).toBe('20-11-2022') + }) + it('parse comma separated date', () => { + const input = '20,11,2022' + const format = 'DD,MM,YYYY' + const resultDayjs = dayjs(input, format) + const resultMoment = moment(input, format) + expect(resultMoment.isValid()).toBe(true) + expect(resultDayjs.isValid()).toBe(true) + expect(resultDayjs.format('DD-MM-YYYY')).toBe('20-11-2022') + expect(resultMoment.format('DD-MM-YYYY')).toBe('20-11-2022') + }) + it('parse comma separated date in strict mode', () => { + const input = '20,11,2022' + const format = 'DD,MM,YYYY' + const resultDayjs = dayjs(input, format, true) + const resultMoment = moment(input, format, true) + expect(resultMoment.isValid()).toBe(true) + expect(resultDayjs.isValid()).toBe(true) + expect(resultDayjs.format('DD-MM-YYYY')).toBe('20-11-2022') + expect(resultMoment.format('DD-MM-YYYY')).toBe('20-11-2022') + }) + it('parse date with multi character separator', () => { + const input = '20---11---2022' + const format = 'DD-/-MM-#-YYYY' + const resultDayjs = dayjs(input, format) + const resultMoment = moment(input, format) + expect(resultMoment.isValid()).toBe(true) + expect(resultDayjs.isValid()).toBe(true) + expect(resultDayjs.format('DD-MM-YYYY')).toBe('20-11-2022') + expect(resultMoment.format('DD-MM-YYYY')).toBe('20-11-2022') + }) + it('parse date with multi character separator in strict mode', () => { + const input = '20-/-11-#-2022' + const format = 'DD-/-MM-#-YYYY' + const resultDayjs = dayjs(input, format, true) + const resultMoment = moment(input, format, true) + expect(resultMoment.isValid()).toBe(true) + expect(resultDayjs.isValid()).toBe(true) + expect(resultDayjs.format('DD-MM-YYYY')).toBe('20-11-2022') + expect(resultMoment.format('DD-MM-YYYY')).toBe('20-11-2022') + }) +}) + it('parse X x', () => { const input = '1410715640.579' const format = 'X'