+import { isDuration } from './constructor';
import { createDuration } from './create';
+import { createInvalid } from './valid';
function addSubtract (duration, input, value, direction) {
- var other = createDuration(input, value);
-
- duration._milliseconds += direction * other._milliseconds;
- duration._days += direction * other._days;
- duration._months += direction * other._months;
-
- return duration._bubble();
+ var other = isDuration(input) ? input : createDuration(input, value);
+ if (!duration.isValid() || !other.isValid()) {
+ return createInvalid();
+ }
+ return createDuration({
+ ms: duration._milliseconds + direction * other._milliseconds,
+ d: duration._days + direction * other._days,
+ M: duration._months + direction * other._months
+ });
}
// supports only 2.0-style add(1, 's') or add(duration)
proto.isValid = isValid;
proto.abs = abs;
-proto.add = wrap(Duration, add);
-proto.subtract = wrap(Duration, subtract);
+proto.add = add;
+proto.subtract = subtract;
proto.as = as;
proto.asMilliseconds = asMilliseconds;
proto.asSeconds = asSeconds;
import { module, test } from '../qunit';
import moment from '../../moment';
-module('invalid');
+module('duration invalid');
test('invalid duration', function (assert) {
var m = moment.duration.invalid(); // should be invalid