Javascript 使用矩检查字符串是否为有效日期

Javascript 使用矩检查字符串是否为有效日期,javascript,node.js,momentjs,Javascript,Node.js,Momentjs,我正在使用momentjs检查字符串是否为有效日期。 momentjs的验证格式如下: moment(date, formats, true).isValid() 在我的例子中,我不想给出格式,因为我只想检查字符串是否为有效日期,我不关心格式。 我尝试了以下方法: moment("date string").isValid() 虽然这给出了正确的响应,但我在控制台中也得到了错误。有没有办法只检查日期而不检查格式 Deprecation warning: value provided is

我正在使用
momentjs
检查字符串是否为有效日期。 momentjs的验证格式如下:

moment(date,  formats, true).isValid()
在我的例子中,我不想给出格式,因为我只想检查字符串是否为有效日期,我不关心格式。 我尝试了以下方法:

moment("date string").isValid()
虽然这给出了正确的响应,但我在控制台中也得到了错误。有没有办法只检查日期而不检查格式

Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across
all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.
Arguments:
[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: Sat Sep 08 2050 01:27:14 GMT+0530 (India Standard Time), _f: undefined, _strict: undefined, _locale: [object Object]
Error
    at Function.createFromInputFallback (F:\myproj\backend\node_modules\moment\moment.js:320:98)
    at configFromString (F:\myproj\backend\node_modules\moment\moment.js:2385:15)
    at configFromInput (F:\myproj\backend\node_modules\moment\moment.js:2611:13)
    at prepareConfig (F:\myproj\backend\node_modules\moment\moment.js:2594:13)

JavaScript只有一种官方日期/时间格式,即基于ISO-8601的格式,例如
“2019-09-07T08:16:55.216Z”
。Moment告诉您的是,您没有提供用于解析日期的格式,并且日期不符合JavaScript的格式,因此Moment不得不退回到使用新日期,并希望它做正确的事情。正如消息所说,这在浏览器中是不可靠的,因为它们都可以实现自己的“…特定于实现的启发式或特定于实现的日期格式…”()。这意味着Chrome解析的给定字符串可能不会在Safari上解析,或者更糟糕的是,可能会以不同的方式解析(例如,使用本地时间与UTC)


因此,结果是:除非日期是JavaScript格式,否则要获得可靠的结果,您必须告诉Moment使用什么格式来解析它。

JavaScript只有一个官方日期/时间格式,即基于ISO-8601的格式,例如
“2019-09-07T08:16:55.216Z”
。Moment告诉您的是,您没有提供用于解析日期的格式,并且日期不符合JavaScript的格式,因此Moment不得不退回到使用新日期,并希望它做正确的事情。正如消息所说,这在浏览器中是不可靠的,因为它们都可以实现自己的“…特定于实现的启发式或特定于实现的日期格式…”()。这意味着Chrome解析的给定字符串可能不会在Safari上解析,或者更糟糕的是,可能会以不同的方式解析(例如,使用本地时间与UTC)


因此,结果是:除非日期是JavaScript格式的,否则为了获得可靠的结果,您可以告诉Moment使用什么格式来解析它。

哦,谢谢,但在我的情况下,我在nodejs进行验证,日期作为API请求体的一部分,它可以是任何字符串,我想验证传递的字符串是否为有效日期。所以,我想我将不得不使用其他模块,而不是片刻。或者必须在数组中添加所有可能的日期格式。@Noober-“…它可以是任何字符串…”那么您就不可能可靠地解析它。我不是说这一刻或JavaScript是不可能的,我是说这是不可能的,句号。
“05-03-2019 02:00”
代表什么日期/时间?在美国,你可能会说2019年5月3日凌晨2点。基本上在其他任何地方(英国、欧洲等),你会说2019年3月5日凌晨2点。看到问题了吗?但是等等,情况变得更糟了:那是什么时区?V8将其视为本地时间,但另一个引擎可以将其视为UTC——或者根本拒绝解析它(Safari中的JavaScriptCore)。(续)(续)您正在处理的任何API都应该定义日期/时间格式,并且只接受该格式的日期/时间字符串,而不接受其他格式。现在,如果你想让自己完全误解你得到的日期,你可以通过做
Moment(newdate(theString))
来避免这个错误。但我强烈鼓励你不要那样做。指定格式并仅分析该格式。:-)(不太有趣的事实:即使在英国,
新日期(“2019年3月5日”)
解析为5月3日,而不是3月5日。为什么?因为尽管没有指定,Netscape Navigator中的早期版本的JavaScript引擎都是这样做的,因为它们以美国为中心。为了避免破坏编写糟糕的JavaScript代码,之后的每个JavaScript引擎都必须做同样的事情。这导致了数十万个错误ors在世界其他地方,因为编码人员假设新日期对区域设置来说是正确的。)哦,谢谢,但在我的例子中,我在nodejs进行验证,日期作为API请求体的一部分,它可以是任何字符串,我想验证传递的字符串是否是有效的日期。所以,我想我将不得不使用其他模块,而不是片刻。或者必须在数组中添加所有可能的日期格式。@Noober-“…它可以是任何字符串…”那么您就不可能可靠地解析它。我不是说这一刻或JavaScript是不可能的,我是说这是不可能的,句号。
“05-03-2019 02:00”
代表什么日期/时间?在美国,你可能会说2019年5月3日凌晨2点。基本上在其他任何地方(英国、欧洲等),你会说2019年3月5日凌晨2点。看到问题了吗?但是等等,情况变得更糟了:那是什么时区?V8将其视为本地时间,但另一个引擎可以将其视为UTC——或者根本拒绝解析它(Safari中的JavaScriptCore)。(续)(续)您正在处理的任何API都应该定义日期/时间格式,并且只接受该格式的日期/时间字符串,而不接受其他格式。现在,如果你想让自己完全误解你得到的日期,你可以通过做
Moment(newdate(theString))
来避免这个错误。但我强烈鼓励你不要那样做。指定格式并仅分析该格式。:-)(不太有趣的事实:即使在英国,
新日期(“2019年3月5日”)
解析为5月3日,而不是3月5日。为什么?因为尽管没有指定,Netscape Navigator中的早期版本的JavaScript引擎都是这样做的,因为它们以美国为中心。为了避免破坏编写糟糕的JavaScript代码,之后的每个JavaScript引擎都必须做同样的事情。这导致了数十万个错误因为编码人员认为
新日期
会对区域设置做出正确的选择。)