+/**
+ * @param strict Strict parsing disables the deprecated fallback to the native Date constructor when
+ * parsing a string.
+ */
+declare function moment(inp?: moment.MomentInput, strict?: boolean): moment.Moment;
+/**
+ * @param strict Strict parsing requires that the format and input match exactly, including delimeters.
+ * Strict parsing is frequently the best parsing option. For more information about choosing strict vs
+ * forgiving parsing, see the [parsing guide](https://momentjs.com/guides/#/parsing/).
+ */
declare function moment(inp?: moment.MomentInput, format?: moment.MomentFormatSpecification, strict?: boolean): moment.Moment;
+/**
+ * @param strict Strict parsing requires that the format and input match exactly, including delimeters.
+ * Strict parsing is frequently the best parsing option. For more information about choosing strict vs
+ * forgiving parsing, see the [parsing guide](https://momentjs.com/guides/#/parsing/).
+ */
declare function moment(inp?: moment.MomentInput, format?: moment.MomentFormatSpecification, language?: string, strict?: boolean): moment.Moment;
declare namespace moment {
export function createLocalOrUTC(input, format, locale, strict, isUTC) {
var c = {};
+ if (format === true || format === false) {
+ strict = format;
+ format = undefined;
+ }
+
if (locale === true || locale === false) {
strict = locale;
locale = undefined;
}
}
-// date from iso format or fallback
+// date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
export function configFromString(config) {
var matched = aspNetJsonRegex.exec(config._i);
-
if (matched !== null) {
config._d = new Date(+matched[1]);
return;
return;
}
- // Final attempt, use Input Fallback
- hooks.createFromInputFallback(config);
+ if (config._strict) {
+ config._isValid = false;
+ } else {
+ // Final attempt, use Input Fallback
+ hooks.createFromInputFallback(config);
+ }
}
hooks.createFromInputFallback = deprecate(
);
});
+test('string without format - strict parsing', function (assert) {
+ assert.equal(
+ moment('Date(1325132654000)', false).valueOf(),
+ 1325132654000,
+ 'Date(1325132654000)'
+ );
+ assert.equal(
+ moment('Date(1325132654000)', true).valueOf(),
+ 1325132654000,
+ 'Date(1325132654000)'
+ );
+ assert.equal(
+ moment('/Date(1325132654000)/', true).valueOf(),
+ 1325132654000,
+ '/Date(1325132654000)/'
+ );
+ assert.equal(moment('1/1/2001', true).isValid(), false, '1/1/2001');
+ assert.equal(moment.utc('1/1/2001', true).isValid(), false, '1/1/2001 utc');
+});
+
test('string with format dropped am/pm bug', function (assert) {
moment.locale('en');
var array = [2010, 1, 14, 15, 25, 50, 125];
var day11 = moment(Date.UTC.apply({}, array));
var day12 = moment.unix(1318781876);
+var day13 = moment("/Date(1198908717056-0700)/", true);
+var day14 = moment("foobazbar", 'L', true);
// TODO: reenable in 2.0
// moment(null);