]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Adding time specific diffs
authorTim Wood <washwithcare@gmail.com>
Tue, 25 Oct 2011 16:30:37 +0000 (09:30 -0700)
committerTim Wood <washwithcare@gmail.com>
Tue, 25 Oct 2011 16:30:43 +0000 (09:30 -0700)
build.js
moment.js
test/date.js

index 80c5bfbe9f650b9782ae4e68a2f4cf7a295d3180..0da5def823500c7e611dde1e577b287a42eaaea2 100755 (executable)
--- a/build.js
+++ b/build.js
@@ -18,6 +18,7 @@ var JSHINT_CONFIG = {
     "debug": false,
     "devel": false,
     "eqeqeq": true,
+    "eqnull": true,
     "evil": false,
     "forin": false,
     "immed": false,
index f8244719e3842de548f2040031cd8ae6ca54db41..e52a8558231fec4169db24e8707fdd6dc73100a4 100644 (file)
--- a/moment.js
+++ b/moment.js
             return this;
         },
 
-        diff : function (input, format) {
-            return this._d - moment(input, format)._d;
+        diff : function (input, val, float) {
+            var inputMoment = moment(input),
+                diff = this._d - inputMoment._d, 
+                year = this.year() - inputMoment.year(), 
+                month = this.month() - inputMoment.month(), 
+                day = this.day() - inputMoment.day(),
+                output;
+            if (val === 'months') {
+                output = year * 12 + month + day / 30;
+            } else if (val === 'years') {
+                output = year + month / 12;
+            } else {
+                output = val === 'seconds' ? diff / 1e3 : // 1000
+                    val === 'minutes' ? diff / 6e4 : // 1000 * 60
+                    val === 'hours' ? diff / 36e5 : // 1000 * 60 * 60
+                    val === 'days' ? diff / 864e5 : // 1000 * 60 * 60 * 24
+                    val === 'weeks' ? diff / 6048e5 : // 1000 * 60 * 60 * 24 * 7
+                    val === 'days' ? diff / 3600 : diff;
+            }
+            return float ? output : round(output);
         },
 
         from : function (time, withoutSuffix) {
index a45b93587c1a0865947ca6cdf5c065d4db3549d4..5f33570a8fe1a6364073be620346a2dc4541112d 100755 (executable)
@@ -184,6 +184,33 @@ test("diff", 5, function() {
     equal(moment(oneHourDate).diff(nowDate), 60 * 60 * 1000, "1 hour from now = 360000");
 });
 
+test("diff key after", 7, function() {
+    equal(moment([2010]).diff([2011], 'years'), -1, "year diff");
+    equal(moment([2010]).diff([2011, 6], 'years', true), -1.5, "year diff, float");
+    equal(moment([2010]).diff([2010, 2], 'months'), -2, "month diff");
+    equal(moment([2010]).diff([2010, 0, 4], 'days'), -3, "day diff");
+    equal(moment([2010]).diff([2010, 0, 1, 4], 'hours'), -4, "hour diff");
+    equal(moment([2010]).diff([2010, 0, 1, 0, 5], 'minutes'), -5, "minute diff");
+    equal(moment([2010]).diff([2010, 0, 1, 0, 0, 6], 'seconds'), -6, "second diff");
+});
+
+test("diff key before", 7, function() {
+    equal(moment([2011]).diff([2010], 'years'), 1, "year diff");
+    equal(moment([2011, 6]).diff([2010], 'years', true), 1.5, "year diff, float");
+    equal(moment([2010, 2]).diff([2010], 'months'), 2, "month diff");
+    equal(moment([2010, 0, 4]).diff([2010], 'days'), 3, "day diff");
+    equal(moment([2010, 0, 1, 4]).diff([2010], 'hours'), 4, "hour diff");
+    equal(moment([2010, 0, 1, 0, 5]).diff([2010], 'minutes'), 5, "minute diff");
+    equal(moment([2010, 0, 1, 0, 0, 6]).diff([2010], 'seconds'), 6, "second diff");
+});
+
+test("diff overflow", 4, function() {
+    equal(moment([2011]).diff([2010], 'months'), 12, "month diff");
+    equal(moment([2010, 0, 2]).diff([2010], 'hours'), 24, "hour diff");
+    equal(moment([2010, 0, 1, 2]).diff([2010], 'minutes'), 120, "minute diff");
+    equal(moment([2010, 0, 1, 0, 4]).diff([2010], 'seconds'), 240, "second diff");
+});
+
 
 module("leap year");