import { normalizeUnits, normalizeObjectUnits } from '../units/aliases'; import { getPrioritizedUnits } from '../units/priorities'; import { hooks } from '../utils/hooks'; import isFunction from '../utils/is-function'; import { daysInMonth } from '../units/month'; import { isLeapYear } from '../utils/is-leap-year'; import toInt from '../utils/to-int'; export function makeGetSet(unit, keepTime) { return function (value) { if (value != null) { set(this, unit, value); hooks.updateOffset(this, keepTime); return this; } else { return get(this, unit); } }; } export function get(mom, unit) { return mom.isValid() ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; } export function set(mom, unit, value) { if (mom.isValid() && !isNaN(value)) { if ( unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29 ) { value = toInt(value); mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit]( value, mom.month(), daysInMonth(value, mom.month()) ); } else { mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); } } } // MOMENTS export function stringGet(units) { units = normalizeUnits(units); if (isFunction(this[units])) { return this[units](); } return this; } export function stringSet(units, value) { if (typeof units === 'object') { units = normalizeObjectUnits(units); var prioritized = getPrioritizedUnits(units), i; for (i = 0; i < prioritized.length; i++) { this[prioritized[i].unit](units[prioritized[i].unit]); } } else { units = normalizeUnits(units); if (isFunction(this[units])) { return this[units](value); } } return this; }