]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
address @ichernev concerns
authorIsaac Cambron <isaac@isaaccambron.com>
Fri, 4 Oct 2013 20:44:17 +0000 (16:44 -0400)
committerIsaac Cambron <isaac@isaaccambron.com>
Fri, 4 Oct 2013 20:44:17 +0000 (16:44 -0400)
moment.js
test/moment/create.js

index 38d8dec16cc8a7cec9e75538fd0b8893abd80f54..fabbb7610705b629d2479615a2cb621d7e407762 100644 (file)
--- a/moment.js
+++ b/moment.js
 
         currentDate = currentDateArray(config);
 
-        //compute day of the year form weeks and weekdays
+        //compute day of the year from weeks and weekdays
         if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
             fixYear = function (val) {
                 return val ?
                   (val.length < 3 ? (parseInt(val, 10) > 68 ? '19' + val : '20' + val) : val) :
-                  (config._a[YEAR] != null ? currentDate[YEAR] :
-                    (config._a[YEAR] == null ? moment().weekYear() : config._a[YEAR]));
+                  (config._a[YEAR] == null ? moment().weekYear() : config._a[YEAR]);
             };
 
             w = config._w;
+            lang = getLangDefinition(config._l);
             if (w.GG != null || w.W != null || w.E != null) {
-                temp = dayOfYearFromWeeks(fixYear(w.GG), w.W, parseWeekday(w.E, config._l), 4, 1);
+                temp = dayOfYearFromWeeks(fixYear(w.GG), w.W, w.E, 4, 1);
+            }
+            else if (w.d != null) {
+                temp = dayOfYearFromWeeks(fixYear(w.gg), w.w, parseWeekday(w.d, lang), 6, 0);
             }
             else {
-                lang = getLangDefinition(config._l);
-                temp = dayOfYearFromWeeks(fixYear(w.gg), w.w, parseWeekday(w.e || w.d, lang), lang._week.doy, lang._week.dow);
+                temp = dayOfYearFromWeeks(fixYear(w.gg), w.w, w.e, lang._week.doy, lang._week.dow);
             }
 
             config._a[YEAR] = temp.year;
         };
     }
 
+    //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
     function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
-        var d = new Date(year, 0).getUTCDay(),
+        var d = new Date(Date.UTC(year, 0)).getUTCDay(),
             daysToAdd, dayOfYear;
 
         week = week || 1;
index 5c157d8a918873a36dc663bc2a93b0aecfd86474..4dd6c1648a5277157b973eb5ba0a42e33d465285 100644 (file)
@@ -616,10 +616,11 @@ exports.create = {
         test.equal(moment('1999 37', 'GGGG WW').format('YYYY MM DD'), "1999 09 13", 'iso week double');
 
         //year + week + day
-        test.equal(moment('1999 37 4', 'gggg ww e').format('YYYY MM DD'), "1999 09 09", 'day');
-        test.equal(moment('1999 37 04', 'gggg ww e').format('YYYY MM DD'), "1999 09 09", 'day');
         test.equal(moment('1999 37 4', 'GGGG WW E').format('YYYY MM DD'), "1999 09 16", 'iso day');
-        test.equal(moment('1999 37 04', 'GGGG WW E').format('YYYY MM DD'), "1999 09 16", 'iso day');
+        test.equal(moment('1999 37 04', 'GGGG WW E').format('YYYY MM DD'), "1999 09 16", 'iso day wide');
+
+        test.equal(moment('1999 37 4', 'gggg ww e').format('YYYY MM DD'), "1999 09 09", 'day');
+        test.equal(moment('1999 37 04', 'gggg ww e').format('YYYY MM DD'), "1999 09 09", 'day wide');
 
         //d
         test.equal(moment('1999 37 4', 'gggg ww d').format('YYYY MM DD'), "1999 09 09", 'd');
@@ -630,10 +631,10 @@ exports.create = {
         //lower-order only
         test.equal(moment('22', 'ww').week(), 22, "week sets the week by itself");
         test.equal(moment('22', 'ww').year(), moment().year(), "week keeps this year");
-        test.equal(moment('2013 22', 'YYYY ww').year(), 2013, "week keeps parsed year");
+        test.equal(moment('2012 22', 'YYYY ww').year(), 2012, "week keeps parsed year");
 
         test.equal(moment('22', 'WW').isoWeek(), 22, "iso week sets the week by itself");
-        test.equal(moment('2013 22', 'YYYY WW').year(), 2013, "iso week keeps parsed year");
+        test.equal(moment('2012 22', 'YYYY WW').year(), 2012, "iso week keeps parsed year");
         test.equal(moment('22', 'WW').year(), moment().year(), "iso week keeps this year");
 
         //order
@@ -644,5 +645,17 @@ exports.create = {
         test.equals(moment('1999-W37-4 3:30', 'GGGG-[W]WW-E HH:mm').format('YYYY MM DD HH:mm'), '1999 09 16 03:30', "parsing weeks and hours");
 
         test.done();
+    },
+
+    'parsing localized weekdays' : function (test) {
+        try {
+            moment.lang('fr');
+            test.equal(moment('1999 37 4', 'gggg ww e').format('YYYY MM DD'), "1999 09 16", 'localized e uses local doy and dow');
+            test.equal(moment('1999 37 4', 'gggg ww d').format('YYYY MM DD'), "1999 09 09", 'localized d ignores lang entirely');
+        }
+        finally {
+            moment.lang('en');
+            test.done();
+        }
     }
 };