这是我当前的日期验证函数:
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()));
}
但是现在我的“返回”部分在进行比较时包含错误的值。
有人可以帮忙吗?
最佳答案
对于示例日期 "02/04/2012"
,函数的第一个变体将 "02", 3, "2012"
作为参数传递。然后,您的函数尝试将 "02"
与 "2"
进行比较,这显然是“不等于”。
您应该将数字作为数字进行比较。一元 +
运算符是将字符串转换为数字的快捷方式(+"01"
生成 1
;您可以使用 parseInt
以及):
return
+day === dteDate.getDate() &&
+month === dteDate.getMonth() &&
+year === dteDate.getFullYear();
Here is another way to validate dates使用 RegRx 和 JavaScript Date 对象。
关于javascript - 在我的日期验证中合并前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14876425/