| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 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');
|