From: Tim Wood Date: Thu, 3 May 2012 16:15:48 +0000 (-0700) Subject: Fixing thrown error when parsing an empty string with multiple formats X-Git-Tag: 1.6.2^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7ab23982d5ea393b03a4951d199b175ecbaed0ef;p=thirdparty%2Fmoment.git Fixing thrown error when parsing an empty string with multiple formats #301 --- diff --git a/moment.js b/moment.js index 87862ff21..08b3f49ab 100644 --- a/moment.js +++ b/moment.js @@ -363,7 +363,7 @@ // MONTH case 'M' : // fall through to MM case 'MM' : - datePartArray[1] = ~~input - 1; + datePartArray[1] = (input == null) ? 0 : ~~input - 1; break; case 'MMM' : // fall through to MMMM case 'MMMM' : @@ -452,7 +452,7 @@ i, parsedInput; for (i = 0; i < tokens.length; i++) { - parsedInput = (getParseRegexForToken(tokens[i]).exec(string) || [0])[0]; + parsedInput = (getParseRegexForToken(tokens[i]).exec(string) || [])[0]; string = string.replace(getParseRegexForToken(tokens[i]), ''); addTimeToArrayFromToken(tokens[i], parsedInput, datePartArray, config); } @@ -488,7 +488,7 @@ // date from string and array of format strings function makeDateFromStringAndArray(string, formats) { var output, - inputParts = string.match(parseMultipleFormatChunker), + inputParts = string.match(parseMultipleFormatChunker) || [], formattedInputParts, scoreToBeat = 99, i, @@ -496,7 +496,7 @@ currentScore; for (i = 0; i < formats.length; i++) { currentDate = makeDateFromStringAndFormat(string, formats[i]); - formattedInputParts = formatMoment(new Moment(currentDate), formats[i]).match(parseMultipleFormatChunker); + formattedInputParts = formatMoment(new Moment(currentDate), formats[i]).match(parseMultipleFormatChunker) || []; currentScore = compareArrays(inputParts, formattedInputParts); if (currentScore < scoreToBeat) { scoreToBeat = currentScore; diff --git a/test/moment/create.js b/test/moment/create.js index 05ddf93e5..66be79671 100644 --- a/test/moment/create.js +++ b/test/moment/create.js @@ -75,6 +75,16 @@ exports.create = { test.done(); }, + "empty string with formats" : function(test) { + test.expect(3); + + test.equal(moment(' ', 'MM').format('YYYY-MM-DD HH:mm:ss'), '1900-01-01 00:00:00', 'should not break if input is an empty string'); + test.equal(moment(' ', 'DD').format('YYYY-MM-DD HH:mm:ss'), '1900-01-01 00:00:00', 'should not break if input is an empty string'); + test.equal(moment(' ', ['MM', "DD"]).format('YYYY-MM-DD HH:mm:ss'), '1900-01-01 00:00:00', 'should not break if input is an empty string'); + + test.done(); + }, + "string with format" : function(test) { moment.lang('en'); var a = [