Javascript 当解析格式错误的日期时,moment.js会做一些奇怪的事情
如果我将Javascript 当解析格式错误的日期时,moment.js会做一些奇怪的事情,javascript,date,momentjs,Javascript,Date,Momentjs,如果我将YYYY-MM-17指定为moment.js的日期,则表示该日期有效: var myMoment = moment('YYYY-MM-17', 'YYYY-MM-DD'); console.log(myMoment.isValid()); // -> true console.log(myMoment.get('year')); // -> 2017 console.log(myMoment.get('month')); // -> 0 console.log(my
YYYY-MM-17
指定为moment.js的日期,则表示该日期有效:
var myMoment = moment('YYYY-MM-17', 'YYYY-MM-DD');
console.log(myMoment.isValid()); // -> true
console.log(myMoment.get('year')); // -> 2017
console.log(myMoment.get('month')); // -> 0
console.log(myMoment.get('day')); // -> 0
我在不同的浏览器上也看到了不同的结果。根据报告:
。。。我们首先检查字符串是否匹配已知的ISO 8601格式,如果找不到已知格式,则返回到新日期(字符串)
这不是我所看到的。使用相同格式以本机方式指定日期时:
var date = new Date('YYYY-MM-17'); // -> NaN
console.log(date.getYear()); // -> NaN
console.log(date.getMonth()); // -> NaN
console.log(date.getDay()); // -> NaN
事实证明有一个严格的选项。从: Moment的解析器非常宽容,这可能会导致不希望的行为。从2.3.0版开始,您可以为最后一个参数指定一个布尔值,以便使用严格解析。严格的解析要求格式和输入完全匹配
我试图回答这个问题,但我不得不放弃,因为我发现从2001年1月到12月1日,Moment将
Moment('foo-bar-17')
视为无效,而Moment('foo-bar-1')
一直到Moment('foo-bar-12')
。我不确定你看到了什么不同的结果,但这可能与此有关。谢谢詹姆斯。发现解析有一个“严格”选项。把我的答案贴在下面。
var myMoment = moment('YYYY-MM-17', 'YYYY-MM-DD', true);
console.log(myMoment.isValid()); // -> false
console.log(myMoment.get('year')); // -> 2016
console.log(myMoment.get('month')); // -> 4
console.log(myMoment.get('day')); // -> 0