From: Isaac Cambron Date: Mon, 14 Oct 2013 08:28:35 +0000 (-0400) Subject: fixes for Z in ISO parser X-Git-Tag: 2.4.0~13^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a50a5e90077e9f3c3292740a67d9d834a01a7efc;p=thirdparty%2Fmoment.git fixes for Z in ISO parser --- diff --git a/moment.js b/moment.js index e97318d66..a256f1b02 100644 --- a/moment.js +++ b/moment.js @@ -54,7 +54,7 @@ // preliminary iso regex // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000) - isoRegex = /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?$/, + isoRegex = /^\s*\d{4}-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d|Z)?)?$/, isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', @@ -539,7 +539,8 @@ nullInput : false, invalidMonth : null, invalidFormat : false, - userInvalidated : false + userInvalidated : false, + iso: false }; } @@ -1310,6 +1311,7 @@ match = isoRegex.exec(string); if (match) { + config._pf.iso = true; for (i = 4; i > 0; i--) { if (match[i]) { // match[5] should be "T" or undefined @@ -1324,7 +1326,7 @@ } } if (parseTokenTimezone.exec(string)) { - config._f += " Z"; + config._f += "Z"; } makeDateFromStringAndFormat(config); } @@ -1491,7 +1493,6 @@ config._i = input = getLangDefinition().preparse(input); } - if (moment.isMoment(input)) { config = extend({}, input); diff --git a/test/moment/create.js b/test/moment/create.js index fc0da3dfd..3127afbcb 100644 --- a/test/moment/create.js +++ b/test/moment/create.js @@ -486,6 +486,35 @@ exports.create = { test.done(); }, + "parsing ISO with Z" : function (test) { + var i, mom, formats = [ + ['2011-10-08T18:04Z', '2011-10-08T18:04:00.000'], + ['2011-10-08T18:04:20Z', '2011-10-08T18:04:20.000'], + ['2011-10-08T18:04:20.1Z', '2011-10-08T18:04:20.100'], + ['2011-10-08T18:04:20.11Z', '2011-10-08T18:04:20.110'], + ['2011-10-08T18:04:20.111Z', '2011-10-08T18:04:20.111'], + ['2011-W40-6T18Z', '2011-10-08T18:00:00.000'], + ['2011-W40-6T18:04Z', '2011-10-08T18:04:00.000'], + ['2011-W40-6T18:04:20Z', '2011-10-08T18:04:20.000'], + ['2011-W40-6T18:04:20.1Z', '2011-10-08T18:04:20.100'], + ['2011-W40-6T18:04:20.11Z', '2011-10-08T18:04:20.110'], + ['2011-W40-6T18:04:20.111Z', '2011-10-08T18:04:20.111'], + ['2011-281T18Z', '2011-10-08T18:00:00.000'], + ['2011-281T18:04Z', '2011-10-08T18:04:00.000'], + ['2011-281T18:04:20Z', '2011-10-08T18:04:20.000'], + ['2011-281T18:04:20Z', '2011-10-08T18:04:20.000'], + ['2011-281T18:04:20.1Z', '2011-10-08T18:04:20.100'], + ['2011-281T18:04:20.11Z', '2011-10-08T18:04:20.110'], + ['2011-281T18:04:20.111Z', '2011-10-08T18:04:20.111'] + ]; + + for (i = 0; i < formats.length; i++) { + mom = moment(formats[i][0]).utc(); + test.equal(mom.format('YYYY-MM-DDTHH:mm:ss.SSS'), formats[i][1], "moment should be able to parse ISO in UTC " + formats[i][0]); + } + test.done(); + }, + "parsing iso with T" : function (test) { test.expect(8);