【发布时间】:2016-03-23 13:39:27
【问题描述】:
如何验证日期?我的意思不是格式,而是逻辑。 例如:2 月 30 日不是有效日期。
var date = new Date("2015-02-29T13:02:49.073Z"); // 2015 Feb 29th does not exist
console.log(date.toISOString());
返回 2015-03-01T13:02:49.073Z(3 月 1 日)。
但是我想知道这个日期(输入)是无效的。
编辑: 在 Chrome 中测试。 Firefox 返回“无效日期”。但不是解析。 只有在使用日期时(例如 toISOString())才会抛出异常。
try
{
var date = new Date("2015-02-29T13:02:49.073Z");
console.log(date.toISOString());
}
catch(e)
{
console.log("error: " + e.message);
}
火狐:
无效日期
铬:
(什么都没有,只是切换到下一个日期。)
总结:它依赖于浏览器。所以,不推荐使用。
【问题讨论】:
-
停止:我现在看到这取决于浏览器。 Firefox 返回无效日期,chrome 忽略并计算到下一天。好的,但这太可怕了。我必须编写一个自己的函数来验证日期字符串。 (?)
-
在 ES5 之前不建议使用 Date.parse,字符串的解析完全依赖于实现。不同主机解析日期字符串的方式仍有许多差异,因此应手动解析日期字符串(如果要适应多种不同格式,库可以提供帮助)。 (ref.)
-
这里有问题吗? Date 构造函数如何处理各种参数背后的逻辑在ECMA-262 中有完整记录。如何验证日期(即值)已在 many questions here 中介绍。
-
@RobG 这不完全一样。问题是关于日期对象允许无效数据。很高兴知道这取决于浏览器。它与ECMA“无关”。这是一种浏览器行为。这个信息很有用。但是感谢您的链接和您的建议。
标签: javascript date