From fa2ec7fcb980dcd2c7498dafe2f9ca2e52d735cf Mon Sep 17 00:00:00 2001 From: iamkun Date: Thu, 28 May 2020 11:03:19 +0800 Subject: [PATCH] fix: Fix CustomParseFormat plugin month index error (#918) fix #915 --- src/plugin/customParseFormat/index.js | 12 ++++++------ test/plugin/customParseFormat.test.js | 6 ++++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/plugin/customParseFormat/index.js b/src/plugin/customParseFormat/index.js index b8426e7dd..c1c7b85b2 100644 --- a/src/plugin/customParseFormat/index.js +++ b/src/plugin/customParseFormat/index.js @@ -78,19 +78,19 @@ const expressions = { MMM: [matchWord, function (input) { const months = getLocalePart('months') const monthsShort = getLocalePart('monthsShort') - const matchIndex = (monthsShort || months.map(_ => _.substr(0, 3))).indexOf(input) - if (matchIndex < 0) { + const matchIndex = (monthsShort || months.map(_ => _.substr(0, 3))).indexOf(input) + 1 + if (matchIndex < 1) { throw new Error() } - this.month = (matchIndex + 1) % 12 + this.month = (matchIndex % 12) || matchIndex }], MMMM: [matchWord, function (input) { const months = getLocalePart('months') - const matchIndex = months.indexOf(input) - if (matchIndex < 0) { + const matchIndex = months.indexOf(input) + 1 + if (matchIndex < 1) { throw new Error() } - this.month = (matchIndex + 1) % 12 + this.month = (matchIndex % 12) || matchIndex }], Y: [matchSigned, addInput('year')], YY: [match2, function (input) { diff --git a/test/plugin/customParseFormat.test.js b/test/plugin/customParseFormat.test.js index 2f315063c..14dd830d3 100644 --- a/test/plugin/customParseFormat.test.js +++ b/test/plugin/customParseFormat.test.js @@ -31,6 +31,9 @@ it('parse string for MMM month format', () => { const input = '4/Mar/2019:11:16:26 +0800' const format = 'D/MMM/YYYY:H:m:s zz' expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf()) + const input2 = '21-Dec-18' + const format2 = 'D-MMM-YY' + expect(dayjs(input2, format2).valueOf()).toBe(moment(input2, format2).valueOf()) }) it('parse string January (getMonth() = 0)', () => { @@ -135,6 +138,9 @@ it('parse month from string', () => { const input = '2018 February 03' const format = 'YYYY MMMM DD' expect(dayjs(input, format).valueOf()).toBe(moment(input, format).valueOf()) + const input2 = '21-December-18' + const format2 = 'D-MMMM-YY' + expect(dayjs(input2, format2).valueOf()).toBe(moment(input2, format2).valueOf()) }) it('parse month from short string', () => {