]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Add weeksInYear and isoWeeksInYear 1462/head
authorIskren Chernev <iskren.chernev@gmail.com>
Tue, 4 Feb 2014 09:01:12 +0000 (01:01 -0800)
committerIskren Chernev <iskren.chernev@gmail.com>
Tue, 4 Feb 2014 09:01:12 +0000 (01:01 -0800)
This implements #1289. I think the week and iso week stuff should go in
a separate calendar at some point.

moment.js
test/moment/weeks_in_year.js [new file with mode: 0644]

index 5c3a39da56b06e3ba32909afe5160b706bdf8954..ed88f4668d700fad786bb92b719d4cd7d9c75c61 100644 (file)
--- a/moment.js
+++ b/moment.js
         return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
     }
 
+    function weeksInYear(year, dow, doy) {
+        return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week;
+    }
+
     function daysInYear(year) {
         return isLeapYear(year) ? 366 : 365;
     }
             return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7);
         },
 
+        isoWeeksInYear : function () {
+            return weeksInYear(this.year(), 1, 4);
+        },
+
+        weeksInYear : function () {
+            var weekInfo = this._lang._week;
+            return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
+        },
+
         get : function (units) {
             units = normalizeUnits(units);
             return this[units]();
diff --git a/test/moment/weeks_in_year.js b/test/moment/weeks_in_year.js
new file mode 100644 (file)
index 0000000..2261540
--- /dev/null
@@ -0,0 +1,96 @@
+var moment = require("../../moment");
+
+exports.weeks_in_year = {
+    "isoWeeksInYear": function (test) {
+        test.equal(moment([2004]).isoWeeksInYear(), 53, "2004 has 53 iso weeks");
+        test.equal(moment([2005]).isoWeeksInYear(), 52, "2005 has 53 iso weeks");
+        test.equal(moment([2006]).isoWeeksInYear(), 52, "2006 has 53 iso weeks");
+        test.equal(moment([2007]).isoWeeksInYear(), 52, "2007 has 52 iso weeks");
+        test.equal(moment([2008]).isoWeeksInYear(), 52, "2008 has 53 iso weeks");
+        test.equal(moment([2009]).isoWeeksInYear(), 53, "2009 has 53 iso weeks");
+        test.equal(moment([2010]).isoWeeksInYear(), 52, "2010 has 52 iso weeks");
+        test.equal(moment([2011]).isoWeeksInYear(), 52, "2011 has 52 iso weeks");
+        test.equal(moment([2012]).isoWeeksInYear(), 52, "2012 has 52 iso weeks");
+        test.equal(moment([2013]).isoWeeksInYear(), 52, "2013 has 52 iso weeks");
+        test.equal(moment([2014]).isoWeeksInYear(), 52, "2014 has 52 iso weeks");
+        test.equal(moment([2015]).isoWeeksInYear(), 53, "2015 has 53 iso weeks");
+
+        test.done();
+    },
+
+    "weeksInYear doy/dow = 1/4": function (test) {
+        moment.lang('1/4', {week: {dow: 1, doy: 4}});
+
+        test.equal(moment([2004]).weeksInYear(), 53, "2004 has 53 weeks");
+        test.equal(moment([2005]).weeksInYear(), 52, "2005 has 53 weeks");
+        test.equal(moment([2006]).weeksInYear(), 52, "2006 has 53 weeks");
+        test.equal(moment([2007]).weeksInYear(), 52, "2007 has 52 weeks");
+        test.equal(moment([2008]).weeksInYear(), 52, "2008 has 53 weeks");
+        test.equal(moment([2009]).weeksInYear(), 53, "2009 has 53 weeks");
+        test.equal(moment([2010]).weeksInYear(), 52, "2010 has 52 weeks");
+        test.equal(moment([2011]).weeksInYear(), 52, "2011 has 52 weeks");
+        test.equal(moment([2012]).weeksInYear(), 52, "2012 has 52 weeks");
+        test.equal(moment([2013]).weeksInYear(), 52, "2013 has 52 weeks");
+        test.equal(moment([2014]).weeksInYear(), 52, "2014 has 52 weeks");
+        test.equal(moment([2015]).weeksInYear(), 53, "2015 has 53 weeks");
+
+        test.done();
+    },
+
+    "weeksInYear doy/dow = 6/12": function (test) {
+        moment.lang('6/12', {week: {dow: 6, doy: 12}});
+
+        test.equal(moment([2004]).weeksInYear(), 53, "2004 has 53 weeks");
+        test.equal(moment([2005]).weeksInYear(), 52, "2005 has 53 weeks");
+        test.equal(moment([2006]).weeksInYear(), 52, "2006 has 53 weeks");
+        test.equal(moment([2007]).weeksInYear(), 52, "2007 has 52 weeks");
+        test.equal(moment([2008]).weeksInYear(), 52, "2008 has 53 weeks");
+        test.equal(moment([2009]).weeksInYear(), 52, "2009 has 53 weeks");
+        test.equal(moment([2010]).weeksInYear(), 53, "2010 has 52 weeks");
+        test.equal(moment([2011]).weeksInYear(), 52, "2011 has 52 weeks");
+        test.equal(moment([2012]).weeksInYear(), 52, "2012 has 52 weeks");
+        test.equal(moment([2013]).weeksInYear(), 52, "2013 has 52 weeks");
+        test.equal(moment([2014]).weeksInYear(), 52, "2014 has 52 weeks");
+        test.equal(moment([2015]).weeksInYear(), 52, "2015 has 53 weeks");
+
+        test.done();
+    },
+
+    "weeksInYear doy/dow = 1/7": function (test) {
+        moment.lang('1/7', {week: {dow: 1, doy: 7}});
+
+        test.equal(moment([2004]).weeksInYear(), 52, "2004 has 53 weeks");
+        test.equal(moment([2005]).weeksInYear(), 52, "2005 has 53 weeks");
+        test.equal(moment([2006]).weeksInYear(), 53, "2006 has 53 weeks");
+        test.equal(moment([2007]).weeksInYear(), 52, "2007 has 52 weeks");
+        test.equal(moment([2008]).weeksInYear(), 52, "2008 has 53 weeks");
+        test.equal(moment([2009]).weeksInYear(), 52, "2009 has 53 weeks");
+        test.equal(moment([2010]).weeksInYear(), 52, "2010 has 52 weeks");
+        test.equal(moment([2011]).weeksInYear(), 52, "2011 has 52 weeks");
+        test.equal(moment([2012]).weeksInYear(), 53, "2012 has 52 weeks");
+        test.equal(moment([2013]).weeksInYear(), 52, "2013 has 52 weeks");
+        test.equal(moment([2014]).weeksInYear(), 52, "2014 has 52 weeks");
+        test.equal(moment([2015]).weeksInYear(), 52, "2015 has 53 weeks");
+
+        test.done();
+    },
+
+    "weeksInYear doy/dow = 0/6": function (test) {
+        moment.lang('0/6', {week: {dow: 0, doy: 6}});
+
+        test.equal(moment([2004]).weeksInYear(), 52, "2004 has 53 weeks");
+        test.equal(moment([2005]).weeksInYear(), 53, "2005 has 53 weeks");
+        test.equal(moment([2006]).weeksInYear(), 52, "2006 has 53 weeks");
+        test.equal(moment([2007]).weeksInYear(), 52, "2007 has 52 weeks");
+        test.equal(moment([2008]).weeksInYear(), 52, "2008 has 53 weeks");
+        test.equal(moment([2009]).weeksInYear(), 52, "2009 has 53 weeks");
+        test.equal(moment([2010]).weeksInYear(), 52, "2010 has 52 weeks");
+        test.equal(moment([2011]).weeksInYear(), 53, "2011 has 52 weeks");
+        test.equal(moment([2012]).weeksInYear(), 52, "2012 has 52 weeks");
+        test.equal(moment([2013]).weeksInYear(), 52, "2013 has 52 weeks");
+        test.equal(moment([2014]).weeksInYear(), 52, "2014 has 52 weeks");
+        test.equal(moment([2015]).weeksInYear(), 52, "2015 has 53 weeks");
+
+        test.done();
+    }
+};