将任意值传递给moment(value)
会根据 #1407 产生弃用警告。
如果有某种方法可以使用这种解析但又不回退到 Date 构造函数,那就太好了。 到目前为止,我发现的唯一方法相当笨拙:
if (moment.isDate(value)) {
return moment(value);
} else {
return moment(value, moment.ISO_8601);
}
即便如此,这仍然无法解析 ASP.net /Date(1198908717056)/
字符串。
最简单的选择是允许使用两个参数形式的严格选项: moment(value, true)
。
谢谢。
只是为了澄清,您要求一种禁用回退而不是显示警告的方法 - 不使用严格模式,对吗?
是的,我想自动解析moment()
支持的所有内容,但如果它们都失败了,我希望它生成无效日期,而不是打印警告并使用Date
构造函数。
我想预先选择加入moment
的未来版本的行为,其中弃用的Date
构造函数回退将完全删除。
我不确定你所说的严格模式到底是什么意思。 你的意思是在传递像moment(value, 'YYYY-MM-DD')
这样的确切格式时吗? 如果是这样,这无济于事,因为 1. 它过于冗长,2. 它仍然不包括moment(value)
在诉诸Date
构造函数之前可以解析的所有格式。
通过传递true
作为最后一个参数来启用严格模式。 它在文档中。 基本上,这意味着字符串必须与格式 _exactly_ 匹配。
由于moment(String)
直接支持的格式已在文档中列出,我认为将其视为与严格模式相同是可以接受的。 换句话说,添加moment(String, Boolean)
。
是啊,那样最好了。 谢谢。
@SystemParadox是的,您想要的是支持。 您只需覆盖moment.createFromInputFallback(config)
:
moment.createFromInputFallback = function (config) {
config._d = new Date(NaN);
}
我同意这不是微不足道的,但有可能;-)
这很有帮助,但会全局更改设置。
如果我想一次调用一次逐步迁移代码库怎么办?
为什么我们不能只添加对moment(String, true)
?
重新开放,虽然有解决方法,但在公共 API 中使用它会有助于各种用例。 还要考虑 #2535,要求仅围绕内置格式进行验证。
需要的是 moment.JS_DATE 常量,这意味着只需将输入传递给new Date
,检查https://github.com/moment/moment/issues/1686。 接受拉取请求。
@SystemParadox以防万一,我遇到了与您类似的问题,我最终创建了如下包装函数:
function disableNativeDateFallback(config) {
config._d = new Date(parseFloat('NaN')); // an invalid date
}
function makeMomentWrapper(momentFn) {
return function() {
var prevFallback = moment.createFromInputFallback;
moment.createFromInputFallback = disableNativeDateFallback;
var result = momentFn.apply(null, arguments);
moment.createFromInputFallback = prevFallback;
return result;
}
};
var momentStrict = makeMomentWrapper(moment);
momentStrict.utc = makeMomentWrapper(moment.utc);
它们的工作方式是简单地替换createFromInputFallback
,然后在返回之前将其恢复以避免影响其他代码。 您准备迁移的任何代码都可以使用momentStrict
和momentStrict.utc
而不是moment
和moment.utc
,其余的可以保持原样。
最有用的评论
@SystemParadox以防万一,我遇到了与您类似的问题,我最终创建了如下包装函数:
它们的工作方式是简单地替换
createFromInputFallback
,然后在返回之前将其恢复以避免影响其他代码。 您准备迁移的任何代码都可以使用momentStrict
和momentStrict.utc
而不是moment
和moment.utc
,其余的可以保持原样。