我想告诉JS中有效和无效日期对象之间的区别,但无法弄清楚如何:
var d = new Date("foo");
console.log(d.toString()); // shows 'Invalid Date'
console.log(typeof d); // shows 'object'
console.log(d instanceof Date); // shows 'true'
Run Code Online (Sandbox Code Playgroud)
编写isValidDate函数的任何想法?
Date.parse用于解析日期字符串,它提供了一种检查日期字符串是否有效的权威方法.Date实例,这最容易验证.Date实例,然后测试它Date的时间值.如果日期无效,则时间值为NaN.我用ECMA-262检查了这个行为是标准的,这正是我正在寻找的.我有一些验证日期的代码如下:
function validateForm() {
var errFound = 0;
//var patt_date = new RegExp("^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))$");
var patt_date = new RegExp("^[0-9]{4}-(((0[13578]|(10|12))-(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)-(0[1-9]|[1-2][0-9]|30)))$");
if (patt_date.test(document.getElementById("datefrom").value) == false){errFound = errFound + 1;document.getElementById("datefrom").className = "error";}
if (errFound > 0)
alert('Please correct red colored field!');
else
return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
以上代码应使用YYYY-MM-DD格式,但无法验证日期,例如"2009-02-29"
评论的代码应该工作(// var patt_date = new RegExp ...),它可以捕获"2009-02-29",
但是当我放入无效数据并尝试纠正它时它会破坏验证,它会一直抱怨某些东西在我纠正它们之后错误的表单值(特别是在具有多个输入的表单上)
也许有人可以修复当前的正则表达式?
测试了2009-02-29,第一个链接工作和第二个没有.再次问题是第二个正则表达式没有检测到值2009-02-29无效而第一个可以(但它毁了我的代码?所以它一定是有问题).
谢谢,
Dels