| import isArray from '../utils/is-array'; |
| import isObject from '../utils/is-object'; |
| import isObjectEmpty from '../utils/is-object-empty'; |
| import isUndefined from '../utils/is-undefined'; |
| import isNumber from '../utils/is-number'; |
| import isDate from '../utils/is-date'; |
| import map from '../utils/map'; |
| import { createInvalid } from './valid'; |
| import { Moment, isMoment } from '../moment/constructor'; |
| import { getLocale } from '../locale/locales'; |
| import { hooks } from '../utils/hooks'; |
| import checkOverflow from './check-overflow'; |
| import { isValid } from './valid'; |
|
|
| import { configFromStringAndArray } from './from-string-and-array'; |
| import { configFromStringAndFormat } from './from-string-and-format'; |
| import { configFromString } from './from-string'; |
| import { configFromArray } from './from-array'; |
| import { configFromObject } from './from-object'; |
|
|
| function createFromConfig (config) { |
| var res = new Moment(checkOverflow(prepareConfig(config))); |
| if (res._nextDay) { |
| |
| res.add(1, 'd'); |
| res._nextDay = undefined; |
| } |
|
|
| return res; |
| } |
|
|
| export function prepareConfig (config) { |
| var input = config._i, |
| format = config._f; |
|
|
| config._locale = config._locale || getLocale(config._l); |
|
|
| if (input === null || (format === undefined && input === '')) { |
| return createInvalid({nullInput: true}); |
| } |
|
|
| if (typeof input === 'string') { |
| config._i = input = config._locale.preparse(input); |
| } |
|
|
| if (isMoment(input)) { |
| return new Moment(checkOverflow(input)); |
| } else if (isDate(input)) { |
| config._d = input; |
| } else if (isArray(format)) { |
| configFromStringAndArray(config); |
| } else if (format) { |
| configFromStringAndFormat(config); |
| } else { |
| configFromInput(config); |
| } |
|
|
| if (!isValid(config)) { |
| config._d = null; |
| } |
|
|
| return config; |
| } |
|
|
| function configFromInput(config) { |
| var input = config._i; |
| if (isUndefined(input)) { |
| config._d = new Date(hooks.now()); |
| } else if (isDate(input)) { |
| config._d = new Date(input.valueOf()); |
| } else if (typeof input === 'string') { |
| configFromString(config); |
| } else if (isArray(input)) { |
| config._a = map(input.slice(0), function (obj) { |
| return parseInt(obj, 10); |
| }); |
| configFromArray(config); |
| } else if (isObject(input)) { |
| configFromObject(config); |
| } else if (isNumber(input)) { |
| |
| config._d = new Date(input); |
| } else { |
| hooks.createFromInputFallback(config); |
| } |
| } |
|
|
| export function createLocalOrUTC (input, format, locale, strict, isUTC) { |
| var c = {}; |
|
|
| if (locale === true || locale === false) { |
| strict = locale; |
| locale = undefined; |
| } |
|
|
| if ((isObject(input) && isObjectEmpty(input)) || |
| (isArray(input) && input.length === 0)) { |
| input = undefined; |
| } |
| |
| |
| c._isAMomentObject = true; |
| c._useUTC = c._isUTC = isUTC; |
| c._l = locale; |
| c._i = input; |
| c._f = format; |
| c._strict = strict; |
|
|
| return createFromConfig(c); |
| } |
|
|