import { matchOffset } from ‘../parse/regex’; import { configFromStringAndFormat } from ‘./from-string-and-format’; import { hooks } from ‘../utils/hooks’; import { deprecate } from ‘../utils/deprecate’;

// iso 8601 regex // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) var isoRegex = /^s*(?:d{6}|d{4})-(?:(dd-dd)|(Wdd$)|(Wdd-d)|(ddd))((T| )(dd(:dd(:dd(.d+)?)?)?)?([+-]dd(?::?dd)?|s*Z)?)?$/;

var isoDates = [

['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/],
['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/],
['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/],
['GGGG-[W]WW', /\d{4}-W\d{2}/],
['YYYY-DDD', /\d{4}-\d{3}/]

];

// iso time formats and regexes var isoTimes = [

['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/],
['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/],
['HH:mm', /(T| )\d\d:\d\d/],
['HH', /(T| )\d\d/]

];

var aspNetJsonRegex = /^/?Date((-?d+)/i;

// date from iso format export function configFromISO(config) {

var i, l,
    string = config._i,
    match = isoRegex.exec(string);

if (match) {
    config._pf.iso = true;
    for (i = 0, l = isoDates.length; i < l; i++) {
        if (isoDates[i][1].exec(string)) {
            // match[5] should be 'T' or undefined
            config._f = isoDates[i][0] + (match[6] || ' ');
            break;
        }
    }
    for (i = 0, l = isoTimes.length; i < l; i++) {
        if (isoTimes[i][1].exec(string)) {
            config._f += isoTimes[i][0];
            break;
        }
    }
    if (string.match(matchOffset)) {
        config._f += 'Z';
    }
    configFromStringAndFormat(config);
} else {
    config._isValid = false;
}

}

// date from iso format or fallback export function configFromString(config) {

var matched = aspNetJsonRegex.exec(config._i);

if (matched !== null) {
    config._d = new Date(+matched[1]);
    return;
}

configFromISO(config);
if (config._isValid === false) {
    delete config._isValid;
    hooks.createFromInputFallback(config);
}

}

hooks.createFromInputFallback = deprecate(

'moment construction falls back to js Date. This is ' +
'discouraged and will be removed in upcoming major ' +
'release. Please refer to ' +
'https://github.com/moment/moment/issues/1407 for more info.',
function (config) {
    config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
}

);