Skip to content

Commit

Permalink
fix: customParseFormat plugin to parse comma as a separator character (
Browse files Browse the repository at this point in the history
  • Loading branch information
BePo65 committed Jun 4, 2022
1 parent 05cba7e commit 41b1405
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 2 deletions.
9 changes: 9 additions & 0 deletions 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)


Expand Down
4 changes: 2 additions & 2 deletions 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
Expand All @@ -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 = {}

Expand Down
55 changes: 55 additions & 0 deletions test/plugin/customParseFormat.test.js
Expand Up @@ -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'
Expand Down

0 comments on commit 41b1405

Please sign in to comment.