]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Fix weekyear/week creation
authorIskren Chernev <iskren.chernev@gmail.com>
Sat, 3 May 2014 06:39:49 +0000 (23:39 -0700)
committerIskren Chernev <iskren.chernev@gmail.com>
Sat, 3 May 2014 06:39:49 +0000 (23:39 -0700)
Initializing a moment given weekyear/week/weekday was not correct for years
starting on Monday.

moment.js
test/moment/create.js

index 257ee7ec1a545e1115658e445008f78f364807c3..c5ca0bd496a80a7946d5f6486ae905be48f6cad0 100644 (file)
--- a/moment.js
+++ b/moment.js
             }
             else {
                 lang = getLangDefinition(config._l);
-                weekday = w.d != null ?  parseWeekday(w.d, lang) :
-                  (w.e != null ?  parseInt(w.e, 10) + lang._week.dow : 0);
+                weekday = w.d != null ? parseWeekday(w.d, lang) :
+                  ((w.e != null ? parseInt(w.e, 10) : 0) + lang._week.dow);
 
                 week = parseInt(w.w, 10) || 1;
 
     function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
         var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear;
 
+        d = d === 0 ? 7 : d;
         weekday = weekday != null ? weekday : firstDayOfWeek;
         daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0);
         dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1;
index 0c5cebb2eeb068fce3f857fd4f15c2fe67e7a372..9c5cc84945be1117d5884d20d30f2ae7c4654bc5 100644 (file)
@@ -14,6 +14,7 @@ var getVerifier = function (test) {
 
 exports.create = {
     setUp : function (done) {
+        moment.lang('en');
         moment.createFromInputFallback = function () {
             throw new Error("input not handled by moment");
         };
@@ -529,6 +530,69 @@ exports.create = {
         test.done();
     },
 
+    "parsing iso week year/week/weekday" : function (test) {
+        test.equal(moment.utc("2007-W01").format(), "2007-01-01T00:00:00+00:00", "2008 week 1 (1st Jan Mon)");
+        test.equal(moment.utc("2008-W01").format(), "2007-12-31T00:00:00+00:00", "2008 week 1 (1st Jan Tue)");
+        test.equal(moment.utc("2003-W01").format(), "2002-12-30T00:00:00+00:00", "2008 week 1 (1st Jan Wed)");
+        test.equal(moment.utc("2009-W01").format(), "2008-12-29T00:00:00+00:00", "2009 week 1 (1st Jan Thu)");
+        test.equal(moment.utc("2010-W01").format(), "2010-01-04T00:00:00+00:00", "2010 week 1 (1st Jan Fri)");
+        test.equal(moment.utc("2011-W01").format(), "2011-01-03T00:00:00+00:00", "2011 week 1 (1st Jan Sat)");
+        test.equal(moment.utc("2012-W01").format(), "2012-01-02T00:00:00+00:00", "2012 week 1 (1st Jan Sun)");
+        test.done();
+    },
+
+    "parsing week year/week/weekday (dow 1, doy 4)" : function (test) {
+        moment.lang("dow:1,doy:4", {week: {dow: 1, doy: 4}});
+
+        test.equal(moment.utc("2007-01", "gggg-ww").format(), "2007-01-01T00:00:00+00:00", "2007 week 1 (1st Jan Mon)");
+        test.equal(moment.utc("2008-01", "gggg-ww").format(), "2007-12-31T00:00:00+00:00", "2008 week 1 (1st Jan Tue)");
+        test.equal(moment.utc("2003-01", "gggg-ww").format(), "2002-12-30T00:00:00+00:00", "2003 week 1 (1st Jan Wed)");
+        test.equal(moment.utc("2009-01", "gggg-ww").format(), "2008-12-29T00:00:00+00:00", "2009 week 1 (1st Jan Thu)");
+        test.equal(moment.utc("2010-01", "gggg-ww").format(), "2010-01-04T00:00:00+00:00", "2010 week 1 (1st Jan Fri)");
+        test.equal(moment.utc("2011-01", "gggg-ww").format(), "2011-01-03T00:00:00+00:00", "2011 week 1 (1st Jan Sat)");
+        test.equal(moment.utc("2012-01", "gggg-ww").format(), "2012-01-02T00:00:00+00:00", "2012 week 1 (1st Jan Sun)");
+        test.done();
+    },
+
+    "parsing week year/week/weekday (dow 1, doy 7)" : function (test) {
+        moment.lang("dow:1,doy:7", {week: {dow: 1, doy: 7}});
+
+        test.equal(moment.utc("2007-01", "gggg-ww").format(), "2007-01-01T00:00:00+00:00", "2007 week 1 (1st Jan Mon)");
+        test.equal(moment.utc("2008-01", "gggg-ww").format(), "2007-12-31T00:00:00+00:00", "2008 week 1 (1st Jan Tue)");
+        test.equal(moment.utc("2003-01", "gggg-ww").format(), "2002-12-30T00:00:00+00:00", "2003 week 1 (1st Jan Wed)");
+        test.equal(moment.utc("2009-01", "gggg-ww").format(), "2008-12-29T00:00:00+00:00", "2009 week 1 (1st Jan Thu)");
+        test.equal(moment.utc("2010-01", "gggg-ww").format(), "2009-12-28T00:00:00+00:00", "2010 week 1 (1st Jan Fri)");
+        test.equal(moment.utc("2011-01", "gggg-ww").format(), "2010-12-27T00:00:00+00:00", "2011 week 1 (1st Jan Sat)");
+        test.equal(moment.utc("2012-01", "gggg-ww").format(), "2011-12-26T00:00:00+00:00", "2012 week 1 (1st Jan Sun)");
+        test.done();
+    },
+
+    "parsing week year/week/weekday (dow 0, doy 6)" : function (test) {
+        moment.lang("dow:0,doy:6", {week: {dow: 0, doy: 6}});
+
+        test.equal(moment.utc("2007-01", "gggg-ww").format(), "2006-12-31T00:00:00+00:00", "2007 week 1 (1st Jan Mon)");
+        test.equal(moment.utc("2008-01", "gggg-ww").format(), "2007-12-30T00:00:00+00:00", "2008 week 1 (1st Jan Tue)");
+        test.equal(moment.utc("2003-01", "gggg-ww").format(), "2002-12-29T00:00:00+00:00", "2003 week 1 (1st Jan Wed)");
+        test.equal(moment.utc("2009-01", "gggg-ww").format(), "2008-12-28T00:00:00+00:00", "2009 week 1 (1st Jan Thu)");
+        test.equal(moment.utc("2010-01", "gggg-ww").format(), "2009-12-27T00:00:00+00:00", "2010 week 1 (1st Jan Fri)");
+        test.equal(moment.utc("2011-01", "gggg-ww").format(), "2010-12-26T00:00:00+00:00", "2011 week 1 (1st Jan Sat)");
+        test.equal(moment.utc("2012-01", "gggg-ww").format(), "2012-01-01T00:00:00+00:00", "2012 week 1 (1st Jan Sun)");
+        test.done();
+    },
+
+    "parsing week year/week/weekday (dow 6, doy 12)" : function (test) {
+        moment.lang("dow:6,doy:12", {week: {dow: 6, doy: 12}});
+
+        test.equal(moment.utc("2007-01", "gggg-ww").format(), "2006-12-30T00:00:00+00:00", "2007 week 1 (1st Jan Mon)");
+        test.equal(moment.utc("2008-01", "gggg-ww").format(), "2007-12-29T00:00:00+00:00", "2008 week 1 (1st Jan Tue)");
+        test.equal(moment.utc("2003-01", "gggg-ww").format(), "2002-12-28T00:00:00+00:00", "2003 week 1 (1st Jan Wed)");
+        test.equal(moment.utc("2009-01", "gggg-ww").format(), "2008-12-27T00:00:00+00:00", "2009 week 1 (1st Jan Thu)");
+        test.equal(moment.utc("2010-01", "gggg-ww").format(), "2009-12-26T00:00:00+00:00", "2010 week 1 (1st Jan Fri)");
+        test.equal(moment.utc("2011-01", "gggg-ww").format(), "2011-01-01T00:00:00+00:00", "2011 week 1 (1st Jan Sat)");
+        test.equal(moment.utc("2012-01", "gggg-ww").format(), "2011-12-31T00:00:00+00:00", "2012 week 1 (1st Jan Sun)");
+        test.done();
+    },
+
     "parsing ISO with Z" : function (test) {
         var i, mom, formats = [
             ['2011-10-08T18:04',             '2011-10-08T18:04:00.000'],