【发布时间】:2018-05-12 14:00:36
【问题描述】:
我想使用 moment(或任何其他方法)根据默认 javascript 日期格式将特定字符串验证为有效日期值。
我有以下代码:
var date = new Date(); // Tue Nov 28 2017 17:54:41 GMT-0600 (CST)
我想获取该字符串输出并使用 moment 将其验证为有效的日期字符串。我知道我可以做到:
moment(date, moment.ISO_8601).isValid();
但是有一个问题。以下是相同日期值的结果:
moment(new Date(), moment.ISO_8601).isValid(); //True
moment("Tue Nov 28 2017 17:54:41 GMT-0600 (CST)", moment.ISO_8601).isValid() //False
这不是我想要的,因为它们都应该是真的。我不能这样做new Date(...),因为这是该方法的结果:
moment(new Date("Tue Nov 28 2017 17:54:41 GMT-0600 (CST)"), moment.ISO_8601).isValid(); //True
moment(new Date("3"), moment.ISO_8601).isValid(); //True
这也不是我想要的,因为第二行应该是假的。
如果字符串严格遵循Tue Nov 28 2017 17:54:41 GMT-0600 (CST) 格式,我如何才能正确地将其验证为有效日期?
我到处研究以了解Tue Nov 28 2017 17:54:41 GMT-0600 (CST) 是什么格式,但我找不到任何东西。它既不是 ISO 8601,也不是 RFC 2822。
【问题讨论】:
-
是什么让你认为
new Date()产生了一个字符串? -
@Sag1v 我并不是真的这么说,我只是说我有一个这种格式的字符串
-
没有“默认的javascript日期格式”。 Date.prototype.toString 的输出依赖于实现,并且因浏览器和主机而异。但是,需要一个实现来正确解析由它自己的 toString 产生的输出(而不是其他的)。如果解析字符串的结果是无效日期,则需要toString方法返回字符串“无效日期”。
标签: javascript validation date momentjs