moment 中的日期构造在内部使用 javascript 中的 new Date()。 new Date() 构造可在所有浏览器中识别 RFC2822 或 ISO 格式的日期字符串。当构造日期不是这些格式的moment 对象时,会引发弃用警告。
虽然抛出了弃用警告,但对于某些格式,moment 对象将在 Chrome 中成功构建,但在 Firefox 或 Safari 中不会。因此,在 Chrome 中处理日期可能会产生预期的结果(并非总是),并在其他人中抛出 Invalid Date。
考虑一下,02.02.2018,
铬 - moment("02.02.2018")._d -> Fri Feb 02 2018 00:00:00 GMT+0530 (India Standard Time)
火狐 - moment("02.02.2018")._d -> Invalid Date
Safari - moment("02.02.2018")._d -> Invalid Date
因此,如果不使用推荐/标准格式,则使用 moment.js 的风险自负。
要取消弃用警告,
- 正如@Joe Wilson 在之前的回答中所建议的,在
moment 构造中给出日期格式。
例如:moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");
- 以 ISO 或 RFC2822 格式给出日期。
示例:moment("2018-02-01T18:30:00.000Z") - ISO 格式
moment("Thu, 01 Feb 2018 18:30:00 GMT") - RFC2822 格式 - Format in Github
- 正如@niutech 在之前的回答中所建议的那样,设置
moment.suppressDeprecationWarnings = true;
-
我建议立即覆盖输入回退。
moment.createFromInputFallback=function (config){
config._d = new Date(config._i);
}
因为 (3) 将抑制所有警告,(4) 将仅抑制日期构造回退。使用(4),您将得到Invalid Date,因为使用了内部new Date(),并且可以在控制台中看到其他弃用,因此可以升级moment或在应用程序中替换弃用的方法。