]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Switching to using durations and moments in add/subtract private function
authorTim Wood <washwithcare@gmail.com>
Mon, 23 Apr 2012 17:40:05 +0000 (10:40 -0700)
committerTim Wood <washwithcare@gmail.com>
Mon, 23 Apr 2012 17:40:05 +0000 (10:40 -0700)
moment.js

index 0132338a5d8e1e6496151b3add351940e0f16811..adea93514436b0820aa172a72886929cfa762627 100644 (file)
--- a/moment.js
+++ b/moment.js
     }
 
     // helper function for _.addTime and _.subtractTime
-    function dateAddRemove(date, _input, adding, val) {
-        var isString = (typeof _input === 'string'),
-            input, ms, d, M, currentDate;
-
-        if (isString) {
-            input = moment.duration(+val, _input);
-        } else {
-            input = moment.duration(_input);
-        }
-
-        ms = input._milliseconds;
-        d = input._days;
-        M = input._months;
+    function addOrSubtractDurationFromMoment(mom, duration, isAdding) {
+        var ms = duration._milliseconds,
+            d = duration._days,
+            M = duration._months,
+            currentDate;
 
         if (ms) {
-            date.setTime(+date + ms * adding);
+            mom._d.setTime(+mom + ms * isAdding);
         }
         if (d) {
-            date.setDate(date.getDate() + d * adding);
+            mom.date(mom.date() + d * isAdding);
         }
         if (M) {
-            currentDate = date.getDate();
-            date.setDate(1);
-            date.setMonth(date.getMonth() + M * adding);
-            date.setDate(Math.min(new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate(), currentDate));
+            currentDate = mom.date();
+            mom.date(1)
+                .month(mom.month() + M * isAdding)
+                .date(Math.min(currentDate, mom.daysInMonth()));
         }
-        return date;
     }
 
     // check if is an array
         },
 
         add : function (input, val) {
-            this._d = dateAddRemove(this._d, input, 1, val);
+            var dur = val ? moment.duration(+val, input) : moment.duration(input);
+            addOrSubtractDurationFromMoment(this, dur, 1);
             return this;
         },
 
         subtract : function (input, val) {
-            this._d = dateAddRemove(this._d, input, -1, val);
+            var dur = val ? moment.duration(+val, input) : moment.duration(input);
+            addOrSubtractDurationFromMoment(this, dur, -1);
             return this;
         },