From: Andrei Cocorean Date: Sun, 6 Apr 2014 17:15:19 +0000 (+0200) Subject: quarter setter X-Git-Tag: 2.6.0~7^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1afb850ec845db3fc8cd2fbd5ee6b2c7a853d7cd;p=thirdparty%2Fmoment.git quarter setter --- diff --git a/moment.js b/moment.js index 7c9e5abbf..256d96c1d 100644 --- a/moment.js +++ b/moment.js @@ -2112,8 +2112,8 @@ return input == null ? dayOfYear : this.add("d", (input - dayOfYear)); }, - quarter : function () { - return Math.ceil((this.month() + 1.0) / 3.0); + quarter : function (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); }, weekYear : function (input) { @@ -2260,6 +2260,7 @@ moment.fn.months = moment.fn.month; moment.fn.weeks = moment.fn.week; moment.fn.isoWeeks = moment.fn.isoWeek; + moment.fn.quarters = moment.fn.quarter; // add aliased format methods moment.fn.toJSON = moment.fn.toISOString; diff --git a/test/moment/quarter.js b/test/moment/quarter.js index cf3e3fe75..4d4dfec05 100644 --- a/test/moment/quarter.js +++ b/test/moment/quarter.js @@ -8,7 +8,7 @@ exports.quarter = { done(); }, - "library quarter" : function (test) { + "library quarter getter" : function (test) { test.expect(7); test.equal(moment([1985, 1, 4]).quarter(), 1, "Feb 4 1985 is Q1"); @@ -19,6 +19,119 @@ exports.quarter = { test.equal(moment([2001, 11, 12]).quarter(), 4, "Dec 12 2001 is Q4"); test.equal(moment([2000, 0, 2]).quarter(), 1, "Jan 2 2000 is Q1"); + test.done(); + }, + + "quarter setter singular" : function (test) { + var m; + test.expect(4); + + m = moment([2014, 4, 11]); + test.equal(m.quarter(2).month(), 4, "set same quarter"); + test.equal(m.quarter(3).month(), 7, "set 3rd quarter"); + test.equal(m.quarter(1).month(), 1, "set 1st quarter"); + test.equal(m.quarter(4).month(), 10, "set 4th quarter"); + + test.done(); + }, + + "quarter setter plural" : function (test) { + var m; + test.expect(4); + + m = moment([2014, 4, 11]); + test.equal(m.quarters(2).month(), 4, "set same quarter"); + test.equal(m.quarters(3).month(), 7, "set 3rd quarter"); + test.equal(m.quarters(1).month(), 1, "set 1st quarter"); + test.equal(m.quarters(4).month(), 10, "set 4th quarter"); + + test.done(); + }, + + "quarter setter programmatic" : function (test) { + var m; + test.expect(4); + + m = moment([2014, 4, 11]); + test.equal(m.set("quarter", 2).month(), 4, "set same quarter"); + test.equal(m.set("quarter", 3).month(), 7, "set 3rd quarter"); + test.equal(m.set("quarter", 1).month(), 1, "set 1st quarter"); + test.equal(m.set("quarter", 4).month(), 10, "set 4th quarter"); + + test.done(); + }, + + "quarter setter programmatic plural" : function (test) { + var m; + test.expect(4); + + m = moment([2014, 4, 11]); + test.equal(m.set("quarters", 2).month(), 4, "set same quarter"); + test.equal(m.set("quarters", 3).month(), 7, "set 3rd quarter"); + test.equal(m.set("quarters", 1).month(), 1, "set 1st quarter"); + test.equal(m.set("quarters", 4).month(), 10, "set 4th quarter"); + + test.done(); + }, + + "quarter setter programmatic abbr" : function (test) { + var m; + test.expect(4); + + m = moment([2014, 4, 11]); + test.equal(m.set("Q", 2).month(), 4, "set same quarter"); + test.equal(m.set("Q", 3).month(), 7, "set 3rd quarter"); + test.equal(m.set("Q", 1).month(), 1, "set 1st quarter"); + test.equal(m.set("Q", 4).month(), 10, "set 4th quarter"); + + test.done(); + }, + + "quarter setter only month changes" : function (test) { + var m; + test.expect(7); + + m = moment([2014, 4, 11, 1, 2, 3, 4]).quarter(4); + test.equal(m.year(), 2014, "keep year"); + test.equal(m.month(), 10, "set month"); + test.equal(m.date(), 11, "keep date"); + test.equal(m.hour(), 1, "keep hour"); + test.equal(m.minute(), 2, "keep minutes"); + test.equal(m.second(), 3, "keep seconds"); + test.equal(m.millisecond(), 4, "keep milliseconds"); + + test.done(); + }, + + "quarter setter bubble to next year" : function (test) { + var m; + test.expect(7); + + m = moment([2014, 4, 11, 1, 2, 3, 4]).quarter(7); + test.equal(m.year(), 2015, "year bubbled"); + test.equal(m.month(), 7, "set month"); + test.equal(m.date(), 11, "keep date"); + test.equal(m.hour(), 1, "keep hour"); + test.equal(m.minute(), 2, "keep minutes"); + test.equal(m.second(), 3, "keep seconds"); + test.equal(m.millisecond(), 4, "keep milliseconds"); + + test.done(); + }, + + "quarter setter bubble to previous year" : function (test) { + var m; + test.expect(7); + + m = moment([2014, 4, 11, 1, 2, 3, 4]).quarter(-3); + test.equal(m.year(), 2013, "year bubbled"); + test.equal(m.month(), 1, "set month"); + test.equal(m.date(), 11, "keep date"); + test.equal(m.hour(), 1, "keep hour"); + test.equal(m.minute(), 2, "keep minutes"); + test.equal(m.second(), 3, "keep seconds"); + test.equal(m.millisecond(), 4, "keep milliseconds"); + test.done(); } };