From: Rocky Meza Date: Sun, 15 Apr 2012 09:20:35 +0000 (-0600) Subject: Added the asYear, asMonth, etc. getters to Durations X-Git-Tag: 1.6.0~1^2~6^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F265%2Fhead;p=thirdparty%2Fmoment.git Added the asYear, asMonth, etc. getters to Durations --- diff --git a/moment.js b/moment.js index 1be02ecbe..f936894e7 100644 --- a/moment.js +++ b/moment.js @@ -28,7 +28,17 @@ timezoneParseRegex = /([\+\-]|\d\d)/gi, VERSION = "1.5.0", shortcuts = 'Month|Date|Hours|Minutes|Seconds|Milliseconds'.split('|'), - durationGetters = 'years|months|days|hours|minutes|seconds|milliseconds'.split('|'); + durationGetters = 'years|months|days|hours|minutes|seconds|milliseconds'.split('|'), + unitMillisecondFactors = { + 'Milliseconds' : 1, + 'Seconds' : 1e3, + 'Minutes' : 6e4, + 'Hours' : 36e5, + 'Days' : 864e5, + 'Weeks' : 6048e5, + 'Months' : 2592e6, + 'Years' : 31536e6 + }; // Moment prototype object function Moment(date, isUTC) { @@ -815,10 +825,22 @@ }; } + function makeDurationAsGetter(name, factor) { + moment.duration.fn['as' + name] = function () { + return +this / factor; + }; + } + for (i = 0; i < durationGetters.length; i++) { makeDurationGetter(durationGetters[i]); } + for (i in unitMillisecondFactors) { + if (unitMillisecondFactors.hasOwnProperty(i)) { + makeDurationAsGetter(i, unitMillisecondFactors[i]); + } + } + // CommonJS module is defined if (hasModule) { module.exports = moment; diff --git a/test/moment/duration.js b/test/moment/duration.js index 46971280b..37ac4546b 100644 --- a/test/moment/duration.js +++ b/test/moment/duration.js @@ -14,13 +14,13 @@ exports.duration = { }); test.expect(8); - test.equal(d.years(), 2, "years"); - test.equal(d.months(), 3, "months"); - test.equal(d.weeks(), 2, "weeks"); - test.equal(d.days(), 15, "days"); // two weeks + 1 day - test.equal(d.hours(), 8, "hours"); - test.equal(d.minutes(), 9, "minutes"); - test.equal(d.seconds(), 20, "seconds"); + test.equal(d.years(), 2, "years"); + test.equal(d.months(), 3, "months"); + test.equal(d.weeks(), 2, "weeks"); + test.equal(d.days(), 15, "days"); // two weeks + 1 day + test.equal(d.hours(), 8, "hours"); + test.equal(d.minutes(), 9, "minutes"); + test.equal(d.seconds(), 20, "seconds"); test.equal(d.milliseconds(), 12, "milliseconds"); test.done(); }, @@ -178,6 +178,30 @@ exports.duration = { test.done(); }, + "asGetters" : function(test) { + var d = moment.duration({ + years: 2, + months: 3, + weeks: 2, + days: 1, + hours: 8, + minutes: 9, + seconds: 20, + milliseconds: 12 + }); + + test.expect(8); + test.equal(Math.round(d.asYears() * 100) / 100, 2.26, "years"); + test.equal(Math.round(d.asMonths() * 100) / 100, 27.51, "months"); + test.equal(Math.round(d.asWeeks() * 100) / 100, 117.91, "weeks"); + test.equal(Math.round(d.asDays() * 100) / 100, 825.34, "days"); + test.equal(Math.round(d.asHours() * 100) / 100, 19808.16, "hours"); + test.equal(Math.round(d.asMinutes() * 100) / 100, 1188489.33, "minutes"); + test.equal(Math.round(d.asSeconds() * 100) / 100, 71309360.01, "seconds"); + test.equal(d.asMilliseconds(), 71309360012, "milliseconds"); + test.done(); + }, + "isDuration" : function(test) { test.expect(3); test.ok(moment.isDuration(moment.duration(12345678)), "correctly says true");