1 import isArray from '../utils/is-array';
2 import isDate from '../utils/is-date';
3 import map from '../utils/map';
4 import { createInvalid } from './valid';
5 import { Moment, isMoment } from '../moment/constructor';
6 import { getLocale } from '../locale/locales';
7 import { hooks } from '../utils/hooks';
8 import checkOverflow from './check-overflow';
9 import { isValid } from './valid';
11 import { configFromStringAndArray } from './from-string-and-array';
12 import { configFromStringAndFormat } from './from-string-and-format';
13 import { configFromString } from './from-string';
14 import { configFromArray } from './from-array';
15 import { configFromObject } from './from-object';
17 function createFromConfig (config) {
18 var res = new Moment(checkOverflow(prepareConfig(config)));
20 // Adding is smart enough around DST
22 res._nextDay = undefined;
28 export function prepareConfig (config) {
29 var input = config._i,
32 config._locale = config._locale || getLocale(config._l);
34 if (input === null || (format === undefined && input === '')) {
35 return createInvalid({nullInput: true});
38 if (typeof input === 'string') {
39 config._i = input = config._locale.preparse(input);
42 if (isMoment(input)) {
43 return new Moment(checkOverflow(input));
44 } else if (isArray(format)) {
45 configFromStringAndArray(config);
47 configFromStringAndFormat(config);
48 } else if (isDate(input)) {
51 configFromInput(config);
54 if (!isValid(config)) {
61 function configFromInput(config) {
62 var input = config._i;
63 if (input === undefined) {
64 config._d = new Date(hooks.now());
65 } else if (isDate(input)) {
66 config._d = new Date(input.valueOf());
67 } else if (typeof input === 'string') {
68 configFromString(config);
69 } else if (isArray(input)) {
70 config._a = map(input.slice(0), function (obj) {
71 return parseInt(obj, 10);
73 configFromArray(config);
74 } else if (typeof(input) === 'object') {
75 configFromObject(config);
76 } else if (typeof(input) === 'number') {
78 config._d = new Date(input);
80 hooks.createFromInputFallback(config);
84 export function createLocalOrUTC (input, format, locale, strict, isUTC) {
87 if (typeof(locale) === 'boolean') {
91 // object construction must be done this way.
92 // https://github.com/moment/moment/issues/1423
93 c._isAMomentObject = true;
94 c._useUTC = c._isUTC = isUTC;
100 return createFromConfig(c);