]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Add tests for C1 and support for six-digit years.
authorJason Davies <jason@jasondavies.com>
Thu, 19 Jul 2012 14:33:28 +0000 (15:33 +0100)
committerJason Davies <jason@jasondavies.com>
Thu, 19 Jul 2012 14:33:28 +0000 (15:33 +0100)
moment.js
test/moment/create.js

index 868044d97fec65a404ab315196fe4a8577077276..f430bc781ccca75969306e9948356558c5a5f667 100644 (file)
--- a/moment.js
+++ b/moment.js
@@ -30,7 +30,7 @@
         aspNetJsonRegex = /^\/?Date\((\-?\d+)/i,
 
         // format tokens
-        formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|SS?S?|zz?|ZZ?)/g,
+        formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|YYYYY|YYYY|YY|a|A|hh?|HH?|mm?|ss?|SS?S?|zz?|ZZ?|-)/g,
         localFormattingTokens = /(LT|LL?L?L?)/g,
         formattingRemoveEscapes = /(^\[)|(\\)|\]$/g,
 
@@ -42,6 +42,7 @@
         parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999
         parseTokenThreeDigits = /\d{3}/, // 000 - 999
         parseTokenFourDigits = /\d{4}/, // 0000 - 9999
+        parseTokenFiveToSixDigits = /[+\-]?\d{5,6}/, // -999,999 - 999,999
         parseTokenWord = /[0-9a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+/i, // any word characters or numbers
         parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/i, // +00:00 -00:00 +0000 -0000 or Z
         parseTokenT = /T/i, // T (ISO seperator)
             w    : '(a=new Date(t.year(),t.month(),t.date()-t.day()+5),b=new Date(a.getFullYear(),0,4),a=~~((a-b)/864e5/7+1.5))',
             YY   : 'p(t.year()%100,2)',
             YYYY : 'p(t.year(),4)',
+            YYYYY: 'p(t.year(),5)',
             a    : 'm(t.hours(),t.minutes(),!0)',
             A    : 'm(t.hours(),t.minutes(),!1)',
             H    : 't.hours()',
             return parseTokenThreeDigits;
         case 'YYYY':
             return parseTokenFourDigits;
+        case 'YYYYY':
+            return parseTokenFiveToSixDigits;
         case 'S':
         case 'SS':
         case 'SSS':
             datePartArray[0] = input + (input > 70 ? 1900 : 2000);
             break;
         case 'YYYY' :
-            datePartArray[0] = ~~Math.abs(input);
+        case 'YYYYY' :
+            datePartArray[0] = ~~input;
             break;
         // AM / PM
         case 'a' : // fall through to A
index 13486bd438cfcaf3732af9700ffb5bfc937a7506..52befca237fea61e966ee1686052d1462c875760 100644 (file)
@@ -294,5 +294,22 @@ exports.create = {
         test.equal(moment(null), null, "Calling moment(null)");
         test.equal(moment('', 'YYYY-MM-DD'), null, "Calling moment('', 'YYYY-MM-DD')");
         test.done();
+    },
+
+    "first century" : function(test) {
+        test.expect(2);
+        test.equal(moment([0, 0, 1]).format("YYYY-MM-DD"), "0000-01-01", "Year AD 0");
+        test.equal(moment([99, 0, 1]).format("YYYY-MM-DD"), "0099-01-01", "Year AD 99");
+        test.done();
+    },
+
+    "six digit years" : function(test) {
+        test.expect(5);
+        test.equal(moment([-270000, 0, 1]).format("YYYYY-MM-DD"), "-270000-01-01", "format BC 270,000");
+        test.equal(moment([ 270000, 0, 1]).format("YYYYY-MM-DD"), "270000-01-01", "format AD 270,000");
+        test.equal(moment("-270000-01-01", "YYYYY-MM-DD").toDate().getUTCFullYear(), -270000, "parse BC 270,000");
+        test.equal(moment("270000-01-01",  "YYYYY-MM-DD").toDate().getUTCFullYear(), 270000, "parse AD 270,000");
+        test.equal(moment("+270000-01-01", "YYYYY-MM-DD").toDate().getUTCFullYear(), 270000, "parse AD +270,000");
+        test.done();
     }
 };