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

时间:2019-09-07 08:14:17

标签: javascript node.js momentjs

我正在使用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)

1 个答案:

答案 0 :(得分:3)

JavaScript仅具有一种正式的日期/时间格式,一种基于ISO-8601的defined in the specification,例如"2019-09-07T08:16:55.216Z"。 Moment告诉您的是,您没有提供用于解析日期的格式,并且该日期不符合JavaScript的格式,因此Moment必须退回到使用new Date并希望它做对了。正如消息所言,这在浏览器之间是不可靠的,因为它们都可以实现自己的“ ......实现特定的启发式或实现特定的日期格式...” source)。这意味着Chrome解析的给定字符串可能无法在Safari上解析,或更糟糕的是,可能会不同地进行解析(例如,使用本地时间与UTC进行解析)。

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