这是我当前的日期验证功能:
isValidDate = function(day,month,year) {
var dteDate;
dteDate=new Date(year,month,day);
return ((day.toString()===dteDate.getDate().toString()) && (month.toString()===dteDate.getMonth().toString()) && (year.toString()===dteDate.getFullYear().toString()));
}
然后我检查字段:
checkFields = function() {
var iDate = $("inspect_date").value;
if(iDate.length > 0) {
var a = iDate.split("/");
if(isValidDate(a[0],a[1]-1,a[2]) == false){
alert("You have entered an invalid date. Please amend!");
return false;
}
所以目前它不接受格式为dd / mm / yyy的日期,这就是我想要的 - 该函数不喜欢前导零。
我试图以这种方式修复它:
isValidDate = function(day,month,year) {
var dteDate;
dteDate=new Date(year,month,day);
var day = dteDate.getDate();
var month = dteDate.getMonth() + 1;
var year = dteDate.getFullYear();
var formatted =
(day < 10 ? "0" : "") + day + "/" +
(month < 10 ? "0" : "") + month + "/" +
year;
return ((day.toString()===dteDate.getDate().toString()) && (month.toString()===dteDate.getMonth().toString()) && (year.toString()===dteDate.getFullYear().toString()));
}
但现在我的'return'部分在进行比较时包含了错误的值。
有人可以帮忙吗?
答案 0 :(得分:3)
对于示例日期"02/04/2012"
,函数的第一个变体将"02", 3, "2012"
作为参数传递。然后,您的函数会尝试将"02"
与"2"
进行比较,这显然是&#34;不等于&#34;。
您应该将数字作为数字进行比较。一元+
运算符是将字符串转换为数字的快捷方式(+"01"
会产生1
;您也可以使用parseInt
:
return
+day === dteDate.getDate() &&
+month === dteDate.getMonth() &&
+year === dteDate.getFullYear();
Here is another way to validate dates使用RegRx和JavaScript Date对象。