]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Support up to milliseconds tokens up to 9 digits, fixes #2436
authorIskren Chernev <iskren.chernev@gmail.com>
Sun, 5 Jul 2015 15:28:40 +0000 (00:28 +0900)
committerIskren Chernev <iskren.chernev@gmail.com>
Sun, 26 Jul 2015 05:00:20 +0000 (22:00 -0700)
src/lib/format/format.js
src/lib/units/millisecond.js
src/test/moment/create.js
src/test/moment/format.js

index 51cd0c1328bba4c3afd646490fbd5396dbe99abb..5378170b1f4fd3cf064c11e48f7eda2f0d715dec 100644 (file)
@@ -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;
 
index 2fb73af08ff7301b5a1bcc744a22e920cf37b005..1f9a9bfe4128bede60caf0c88db8300b3a5fd5e3 100644 (file)
@@ -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);
 });
 
index 0de775210d66218e0348fb46775a55485bd1ce5c..202287a4ef24e9204401534b0c3af783f178dc7c 100644 (file)
@@ -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);
+});
index 5c837c1006685c6384e0b4bb374f8681701c0e6d..a31c557fe0f91946796d2ad55ecadbf1bfdd97a6 100644 (file)
@@ -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');
+});