import { get, set } from './get-set';
|
import { setMonth } from '../units/month';
|
import { createDuration } from '../duration/create';
|
import { deprecateSimple } from '../utils/deprecate';
|
import { hooks } from '../utils/hooks';
|
import absRound from '../utils/abs-round';
|
|
// TODO: remove 'name' arg after deprecation is removed
|
function createAdder(direction, name) {
|
return function (val, period) {
|
var dur, tmp;
|
//invert the arguments, but complain about it
|
if (period !== null && !isNaN(+period)) {
|
deprecateSimple(
|
name,
|
'moment().' +
|
name +
|
'(period, number) is deprecated. Please use moment().' +
|
name +
|
'(number, period). ' +
|
'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
|
);
|
tmp = val;
|
val = period;
|
period = tmp;
|
}
|
|
dur = createDuration(val, period);
|
addSubtract(this, dur, direction);
|
return this;
|
};
|
}
|
|
export function addSubtract(mom, duration, isAdding, updateOffset) {
|
var milliseconds = duration._milliseconds,
|
days = absRound(duration._days),
|
months = absRound(duration._months);
|
|
if (!mom.isValid()) {
|
// No op
|
return;
|
}
|
|
updateOffset = updateOffset == null ? true : updateOffset;
|
|
if (months) {
|
setMonth(mom, get(mom, 'Month') + months * isAdding);
|
}
|
if (days) {
|
set(mom, 'Date', get(mom, 'Date') + days * isAdding);
|
}
|
if (milliseconds) {
|
mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
|
}
|
if (updateOffset) {
|
hooks.updateOffset(mom, days || months);
|
}
|
}
|
|
export var add = createAdder(1, 'add'),
|
subtract = createAdder(-1, 'subtract');
|