【发布时间】:2015-11-24 00:02:04
【问题描述】:
如何使用 moment.js(或替代库)解析 Date 以将 2 月 31 日或 6 月 31 日 e、t、c 视为无效?
我知道如果我这样做了
moment("20-02-2000");
它说
Moment {_isAMomentObject: true, _i: "20-02-2000",
_isUTC: false, _locale: Locale, _d: Invalid Date}
所以它可以检测到无效的日期,很好
虽然我使用的是 yyyy-mm-dd
我似乎无法让它解析日期
moment("2000-02-31");
Moment {_isAMomentObject: true, _i: "2000-02-31",
_f: "YYYY-MM-DD", _isUTC: false, _pf: Object…}
^^ 没有关于无效日期的内容
moment("2000-02-40");
Moment {_isAMomentObject: true, _i: "2000-02-40",
_f: "YYYY-MM-DD", _isUTC: false, _pf: Object…}
^^ 没有关于无效日期的内容
moment("2000-40-01");
Moment {_isAMomentObject: true, _i: "2000-40-01",
_f: "YYYY-MM-DD", _isUTC: false, _pf: Object…}
^^ 没有关于无效日期的内容
添加
var v=moment("2000-02-31");
v.toDate()
Thu Mar 02 2000 00:00:00 GMT+0000 (GMT Standard Time)
^^ 我看到如果我给出一个无效的日期,比如 2 月 31 日,它会使其正常化,但我希望它只是说无效。
我正在寻找一个函数,我给它“2000-31-02”它说无效日期。
我已经看到 moment.js 被建议作为 javascript 的 Date 构造函数的替代方案。我查看了 moment.js,因为 javascript 的 Date 构造函数也解析了 31st Feb 而没有说 invalid javascript Date.parse assumes 31 days in February and all months? 。所以我希望 moment.js 能够做到这一点。如果可以,那怎么做?如果没有,那么有没有替代 moment.js 的方法呢?
我正在寻找一个可以导入的库,而不是重新发明轮子。
【问题讨论】:
-
如果你用“YYYY-MM-DD”解析这样的无效,然后转身并以相同的格式格式化它们,它会给你返回相同(无效)的字符串,还是正常化2 月 31 日到 3 月 3 日?
-
@Pointy 我只是在我的 q 中添加了一点来测试它,我看到它对其进行了规范化,但我并不是在寻找它来规范化无效日期。我只是想让它检测/说无效日期。
-
我的意思是,如果您返回的字符串与您提供的字符串不同,那么日期一定是无效的。
标签: javascript datetime momentjs