【发布时间】:2014-01-17 14:36:38
【问题描述】:
我正在尝试编写一些代码来验证表单数据。我有一个日期字段,它应该具有mm/dd/yyyy 格式。我需要捕获2 月 31 日 等异常,所以我添加了以下代码:
var d = new Date(dob);
if (isNaN(d.getTime())) { //this if is to take care of February 31, BUT IT DOESN'T!
error = 1;
message += "<li>Invalid Date</li>";
} else {
var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/;
var validFormat = date_regex.test(dob);
if (!(validFormat)) {
error = 1;
message += "<li>Invalid date format - date must have format mm/dd/yyyy</li>";
}
}
但是我发现了一些非常奇怪的事情:虽然日期 02/32/2000 错误为无效日期,但 02/31/2000 不会!
【问题讨论】:
-
new Date('2013-02-31 00:00:00')实际上计算为Sun Mar 03 2013 00:00:00 GMT-0500 (Eastern Standard Time)所以这就是它不会出错的原因。虽然不是 100% 确定原因 -
这将发生在每个月少于 31 天...
标签: javascript validation