diff --git a/moment.js b/moment.js index b2b893c5f6..8ce2705eeb 100644 --- a/moment.js +++ b/moment.js @@ -637,6 +637,10 @@ zone : function () { return this._d.getTimezoneOffset(); + }, + + daysInMonth : function () { + return this.clone().month(this.month() + 1).date(0).date(); } }; diff --git a/test/moment/days_in_month.js b/test/moment/days_in_month.js new file mode 100644 index 0000000000..e591b1cb90 --- /dev/null +++ b/test/moment/days_in_month.js @@ -0,0 +1,23 @@ +var moment = require("../../moment"); + +exports.days_in_month = { + "days in month" : function(test) { + test.expect(12); + var months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + for (var i = 0; i < 12; i++) { + test.equal(moment([2011, i]).daysInMonth(), + months[i], + moment([2011, i]).format('L') + "should have " + months[i] + " days.") + } + test.done(); + }, + + "days in month leap years" : function(test) { + test.expect(4); + test.equal(moment([2010, 1]).daysInMonth(), 28, "Feb 2010 should have 29 days"); + test.equal(moment([2100, 1]).daysInMonth(), 28, "Feb 2100 should have 29 days"); + test.equal(moment([2008, 1]).daysInMonth(), 29, "Feb 2008 should have 29 days"); + test.equal(moment([2000, 1]).daysInMonth(), 29, "Feb 2000 should have 29 days"); + test.done(); + } +};