From: Iskren Chernev Date: Sun, 5 Jul 2015 15:28:40 +0000 (+0900) Subject: Support up to milliseconds tokens up to 9 digits, fixes #2436 X-Git-Tag: 2.10.5~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3764d5aec34469cc00e4eaa3b467fe6688967761;p=thirdparty%2Fmoment.git Support up to milliseconds tokens up to 9 digits, fixes #2436 --- diff --git a/src/lib/format/format.js b/src/lib/format/format.js index 51cd0c132..5378170b1 100644 --- a/src/lib/format/format.js +++ b/src/lib/format/format.js @@ -1,6 +1,6 @@ import zeroFill from '../utils/zero-fill'; -export var formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g; +export var formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; diff --git a/src/lib/units/millisecond.js b/src/lib/units/millisecond.js index 2fb73af08..1f9a9bfe4 100644 --- a/src/lib/units/millisecond.js +++ b/src/lib/units/millisecond.js @@ -16,12 +16,26 @@ addFormatToken(0, ['SS', 2], 0, function () { return ~~(this.millisecond() / 10); }); -function milliseconds (token) { - addFormatToken(0, [token, 3], 0, 'millisecond'); -} +addFormatToken(0, ['SSS', 3], 0, 'millisecond'); +addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; +}); +addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; +}); +addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; +}); +addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; +}); +addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; +}); +addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; +}); -milliseconds('SSS'); -milliseconds('SSSS'); // ALIASES @@ -33,7 +47,14 @@ addRegexToken('S', match1to3, match1); addRegexToken('SS', match1to3, match2); addRegexToken('SSS', match1to3, match3); addRegexToken('SSSS', matchUnsigned); -addParseToken(['S', 'SS', 'SSS', 'SSSS'], function (input, array) { +addRegexToken('SSSSS', matchUnsigned); +addRegexToken('SSSSSS', matchUnsigned); +addRegexToken('SSSSSSS', matchUnsigned); +addRegexToken('SSSSSSSS', matchUnsigned); +addRegexToken('SSSSSSSSS', matchUnsigned); +addParseToken( + 'S SS SSS SSSS SSSSS SSSSSS SSSSSSS SSSSSSSS SSSSSSSSS'.split(' '), + function (input, array) { array[MILLISECOND] = toInt(('0.' + input) * 1000); }); diff --git a/src/test/moment/create.js b/src/test/moment/create.js index 0de775210..202287a4e 100644 --- a/src/test/moment/create.js +++ b/src/test/moment/create.js @@ -893,3 +893,15 @@ test('parsing invalid string weekdays', function (assert) { assert.equal(false, moment('a', 'dddd', true).isValid(), 'dddd with invalid weekday, strict'); }); + +test('milliseconds', function (assert) { + assert.equal(moment('1', 'S').millisecond(), 100); + assert.equal(moment('12', 'SS').millisecond(), 120); + assert.equal(moment('123', 'SSS').millisecond(), 123); + assert.equal(moment('1234', 'SSSS').millisecond(), 123); + assert.equal(moment('12345', 'SSSSS').millisecond(), 123); + assert.equal(moment('123456', 'SSSSSS').millisecond(), 123); + assert.equal(moment('1234567', 'SSSSSSS').millisecond(), 123); + assert.equal(moment('12345678', 'SSSSSSSS').millisecond(), 123); + assert.equal(moment('123456789', 'SSSSSSSSS').millisecond(), 123); +}); diff --git a/src/test/moment/format.js b/src/test/moment/format.js index 5c837c100..a31c557fe 100644 --- a/src/test/moment/format.js +++ b/src/test/moment/format.js @@ -357,3 +357,17 @@ test('full expanded format is returned from abbreviated formats', function (asse }); }); }); + +test('milliseconds', function (assert) { + var m = moment('123','SSS'); + + assert.equal(m.format('S'), '1'); + assert.equal(m.format('SS'), '12'); + assert.equal(m.format('SSS'), '123'); + assert.equal(m.format('SSSS'), '1230'); + assert.equal(m.format('SSSSS'), '12300'); + assert.equal(m.format('SSSSSS'), '123000'); + assert.equal(m.format('SSSSSSS'), '1230000'); + assert.equal(m.format('SSSSSSSS'), '12300000'); + assert.equal(m.format('SSSSSSSSS'), '123000000'); +});