我正在尝试编写一些代码来验证表单数据。我有一个日期字段,它应该具有 mm/dd/yyyy
格式。我需要捕获诸如 February 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
函数的内容是否与输出的内容相同,如下所示:
// Remember that the month is 0-based so February is actually 1...
function isValidDate(year, month, day) {
var d = new Date(year, month, day);
if (d.getFullYear() == year && d.getMonth() == month && d.getDate() == day) {
return true;
}
return false;
}
那么你可以这样做:
if (isValidDate(2013,1,31))
如果有效则返回 true
,如果无效则返回 false
。
关于javascript 日期验证未验证 2 月 31 日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21188420/