},
"add short" : function (test) {
- test.expect(12);
+ test.expect(16);
- var a = moment(), b, c;
+ var a = moment(), b, c, d;
a.year(2011);
a.month(9);
a.date(12);
test.equal(a.add({w: 1}).date(), 20, 'Add week');
test.equal(a.add({M: 1}).month(), 10, 'Add month');
test.equal(a.add({y: 1}).year(), 2012, 'Add year');
+ test.equal(a.add({Q: 1}).month(), 1, 'Add quarter');
b = moment([2010, 0, 31]).add({M: 1});
c = moment([2010, 1, 28]).subtract({M: 1});
+ d = moment([2010, 1, 28]).subtract({Q: 1});
test.equal(b.month(), 1, 'add month, jan 31st to feb 28th');
test.equal(b.date(), 28, 'add month, jan 31st to feb 28th');
test.equal(c.month(), 0, 'subtract month, feb 28th to jan 28th');
test.equal(c.date(), 28, 'subtract month, feb 28th to jan 28th');
+ test.equal(d.month(), 10, 'subtract quarter, feb 28th 2010 to nov 28th 2009');
+ test.equal(d.date(), 28, 'subtract quarter, feb 28th 2010 to nov 28th 2009');
+ test.equal(d.year(), 2009, 'subtract quarter, feb 28th 2010 to nov 28th 2009');
test.done();
},
"add long" : function (test) {
- test.expect(8);
+ test.expect(9);
var a = moment();
a.year(2011);
test.equal(a.add({weeks: 1}).date(), 20, 'Add week');
test.equal(a.add({months: 1}).month(), 10, 'Add month');
test.equal(a.add({years: 1}).year(), 2012, 'Add year');
+ test.equal(a.add({quarters: 1}).month(), 1, 'Add quarter');
test.done();
},
"add long singular" : function (test) {
- test.expect(8);
+ test.expect(9);
var a = moment();
a.year(2011);
test.equal(a.add({week: 1}).date(), 20, 'Add week');
test.equal(a.add({month: 1}).month(), 10, 'Add month');
test.equal(a.add({year: 1}).year(), 2012, 'Add year');
+ test.equal(a.add({quarter: 1}).month(), 1, 'Add quarter');
test.done();
},
"add string long" : function (test) {
- test.expect(9);
+ test.expect(10);
var a = moment(), b;
a.year(2011);
test.equal(a.add('month', 1).month(), 10, 'Add month');
test.equal(a.add('year', 1).year(), 2012, 'Add year');
test.equal(b.add('day', '01').date(), 13, 'Add date');
+ test.equal(a.add('quarter', 1).month(), 1, 'Add quarter');
test.done();
},
"add string long singular" : function (test) {
- test.expect(9);
+ test.expect(10);
var a = moment(), b;
a.year(2011);
test.equal(a.add('months', 1).month(), 10, 'Add month');
test.equal(a.add('years', 1).year(), 2012, 'Add year');
test.equal(b.add('days', '01').date(), 13, 'Add date');
+ test.equal(a.add('quarters', 1).month(), 1, 'Add quarter');
test.done();
},
"add string short" : function (test) {
- test.expect(8);
+ test.expect(9);
var a = moment();
a.year(2011);
test.equal(a.add('w', 1).date(), 20, 'Add week');
test.equal(a.add('M', 1).month(), 10, 'Add month');
test.equal(a.add('y', 1).year(), 2012, 'Add year');
+ test.equal(a.add('Q', 1).month(), 1, 'Add quarter');
test.done();
},
"add string long reverse args" : function (test) {
- test.expect(8);
+ test.expect(9);
var a = moment();
a.year(2011);
a.milliseconds(500);
test.equal(a.add(50, 'millisecond').milliseconds(), 550, 'Add milliseconds');
- test.equal(a.add(1, 'second', 1).seconds(), 9, 'Add seconds');
- test.equal(a.add(1, 'minute', 1).minutes(), 8, 'Add minutes');
- test.equal(a.add(1, 'hour', 1).hours(), 7, 'Add hours');
- test.equal(a.add(1, 'day', 1).date(), 13, 'Add date');
- test.equal(a.add(1, 'week', 1).date(), 20, 'Add week');
- test.equal(a.add(1, 'month', 1).month(), 10, 'Add month');
- test.equal(a.add(1, 'year', 1).year(), 2012, 'Add year');
+ test.equal(a.add(1, 'second').seconds(), 9, 'Add seconds');
+ test.equal(a.add(1, 'minute').minutes(), 8, 'Add minutes');
+ test.equal(a.add(1, 'hour').hours(), 7, 'Add hours');
+ test.equal(a.add(1, 'day').date(), 13, 'Add date');
+ test.equal(a.add(1, 'week').date(), 20, 'Add week');
+ test.equal(a.add(1, 'month').month(), 10, 'Add month');
+ test.equal(a.add(1, 'year').year(), 2012, 'Add year');
+ test.equal(a.add(1, 'quarter').month(), 1, 'Add quarter');
test.done();
},
"add string long singular reverse args" : function (test) {
- test.expect(8);
+ test.expect(9);
var a = moment();
a.year(2011);
test.equal(a.add(1, 'weeks').date(), 20, 'Add week');
test.equal(a.add(1, 'months').month(), 10, 'Add month');
test.equal(a.add(1, 'years').year(), 2012, 'Add year');
+ test.equal(a.add(1, 'quarters').month(), 1, 'Add quarter');
test.done();
},
"add string short reverse args" : function (test) {
- test.expect(8);
+ test.expect(9);
var a = moment();
a.year(2011);
test.equal(a.add(1, 'w').date(), 20, 'Add week');
test.equal(a.add(1, 'M').month(), 10, 'Add month');
test.equal(a.add(1, 'y').year(), 2012, 'Add year');
+ test.equal(a.add(1, 'Q').month(), 1, 'Add quarter');
test.done();
},
var a = moment(new Date(2011, 2, 12, 5, 0, 0)),
b = moment(new Date(2011, 2, 12, 5, 0, 0)),
c = moment(new Date(2011, 2, 12, 5, 0, 0)),
- d = moment(new Date(2011, 2, 12, 5, 0, 0));
+ d = moment(new Date(2011, 2, 12, 5, 0, 0)),
+ e = moment(new Date(2011, 2, 12, 5, 0, 0));
a.add('days', 1);
b.add('hours', 24);
c.add('months', 1);
+ e.add('quarter', 1);
test.equal(a.hours(), 5, 'adding days over DST difference should result in the same hour');
if (b.isDST() && !d.isDST()) {
test.equal(b.hours(), 6, 'adding hours over DST difference should result in a different hour');
test.equal(b.hours(), 5, 'adding hours over DST difference should result in a same hour if the timezone does not have daylight savings time');
}
test.equal(c.hours(), 5, 'adding months over DST difference should result in the same hour');
+ test.equal(e.hours(), 5, 'adding quarters over DST difference should result in the same hour');
test.done();
}
};
test.done();
},
+ "start of quarter" : function (test) {
+ test.expect(10);
+
+ var m = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).startOf('quarter'),
+ ms = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).startOf('quarters'),
+ ma = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).startOf('Q');
+ test.equal(+m, +ms, "Plural or singular should work");
+ test.equal(+m, +ma, "Full or abbreviated should work");
+ test.equal(m.year(), 2011, "keep the year");
+ test.equal(m.quarter(), 2, "keep the quarter");
+ test.equal(m.month(), 3, "strip out the month");
+ test.equal(m.date(), 1, "strip out the day");
+ test.equal(m.hours(), 0, "strip out the hours");
+ test.equal(m.minutes(), 0, "strip out the minutes");
+ test.equal(m.seconds(), 0, "strip out the seconds");
+ test.equal(m.milliseconds(), 0, "strip out the milliseconds");
+ test.done();
+ },
+
+ "end of quarter" : function (test) {
+ test.expect(10);
+
+ var m = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).endOf('quarter'),
+ ms = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).endOf('quarters'),
+ ma = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).endOf('Q');
+ test.equal(+m, +ms, "Plural or singular should work");
+ test.equal(+m, +ma, "Full or abbreviated should work");
+ test.equal(m.year(), 2011, "keep the year");
+ test.equal(m.quarter(), 2, "keep the quarter");
+ test.equal(m.month(), 5, "set the month");
+ test.equal(m.date(), 30, "set the day");
+ test.equal(m.hours(), 23, "set the hours");
+ test.equal(m.minutes(), 59, "set the minutes");
+ test.equal(m.seconds(), 59, "set the seconds");
+ test.equal(m.milliseconds(), 999, "set the seconds");
+ test.done();
+ },
+
"start of month" : function (test) {
test.expect(9);