From 55a664179c0cd84751f92d008cbbafc6a046f026 Mon Sep 17 00:00:00 2001 From: Stewart MacKenzie-Leigh Date: Mon, 20 Jul 2015 14:47:03 +0100 Subject: [PATCH] Fix two digit year parsing with YYYY format Two digit years will use the parseTwoDigitYear function when parsing with the YYYY format. Closes #2343 --- src/lib/units/year.js | 6 ++++-- src/test/moment/create.js | 8 +++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/lib/units/year.js b/src/lib/units/year.js index 4d8a03b14..cc32b55b6 100644 --- a/src/lib/units/year.js +++ b/src/lib/units/year.js @@ -29,7 +29,10 @@ addRegexToken('YYYY', match1to4, match4); addRegexToken('YYYYY', match1to6, match6); addRegexToken('YYYYYY', match1to6, match6); -addParseToken(['YYYY', 'YYYYY', 'YYYYYY'], YEAR); +addParseToken(['YYYYY', 'YYYYYY'], YEAR); +addParseToken('YYYY', function (input, array) { + array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); +}); addParseToken('YY', function (input, array) { array[YEAR] = hooks.parseTwoDigitYear(input); }); @@ -57,4 +60,3 @@ export var getSetYear = makeGetSet('FullYear', false); export function getIsLeapYear () { return isLeapYear(this.year()); } - diff --git a/src/test/moment/create.js b/src/test/moment/create.js index 0c33104d8..0de775210 100644 --- a/src/test/moment/create.js +++ b/src/test/moment/create.js @@ -240,6 +240,13 @@ test('string with format', function (assert) { } }); +test('2 digit year with YYYY format', function (assert) { + assert.equal(moment('9/2/99', 'D/M/YYYY').format('DD/MM/YYYY'), '09/02/1999', 'D/M/YYYY ---> 9/2/99'); + assert.equal(moment('9/2/1999', 'D/M/YYYY').format('DD/MM/YYYY'), '09/02/1999', 'D/M/YYYY ---> 9/2/1999'); + assert.equal(moment('9/2/68', 'D/M/YYYY').format('DD/MM/YYYY'), '09/02/2068', 'D/M/YYYY ---> 9/2/68'); + assert.equal(moment('9/2/69', 'D/M/YYYY').format('DD/MM/YYYY'), '09/02/1969', 'D/M/YYYY ---> 9/2/69'); +}); + test('unix timestamp format', function (assert) { var formats = ['X', 'X.S', 'X.SS', 'X.SSS'], i, format; @@ -637,7 +644,6 @@ test('first century', function (assert) { assert.equal(moment([99, 0, 1]).format('YYYY-MM-DD'), '0099-01-01', 'Year AD 99'); assert.equal(moment([999, 0, 1]).format('YYYY-MM-DD'), '0999-01-01', 'Year AD 999'); assert.equal(moment('0 1 1', 'YYYY MM DD').format('YYYY-MM-DD'), '0000-01-01', 'Year AD 0'); - assert.equal(moment('99 1 1', 'YYYY MM DD').format('YYYY-MM-DD'), '0099-01-01', 'Year AD 99'); assert.equal(moment('999 1 1', 'YYYY MM DD').format('YYYY-MM-DD'), '0999-01-01', 'Year AD 999'); assert.equal(moment('0 1 1', 'YYYYY MM DD').format('YYYYY-MM-DD'), '00000-01-01', 'Year AD 0'); assert.equal(moment('99 1 1', 'YYYYY MM DD').format('YYYYY-MM-DD'), '00099-01-01', 'Year AD 99'); -- 2.47.3