判断日期是否正确?

wise1979 2009-08-20 11:10:41
以下函数在判断录入的日期数据是否正确时,在录入其它月份时没有问题,不知道为什么在录入8月份和9月份时,例如:2009-8-32或者2009-9-32时不能返回true,请高手帮忙看一下,谢谢!

//检查判断输入的日期格式是否正确//
function CheckDate(INDate){
if (INDate==""){return true;}
//转换年份//
subYY = INDate.substr(0,4);
if(isNaN(subYY) || subYY<=0){return true;}
//转换月份//
if(INDate.indexOf('-',0)!=-1){separate="-"}
else{
if(INDate.indexOf('/',0)!=-1){separate="/"}
else {return true;}
}
area=INDate.indexOf(separate,0)
subMM=INDate.substr(area+1,INDate.indexOf(separate,area+1)-(area+1))
if(isNaN(subMM) || subMM<=0){
return true;
}
if(subMM.length<2){subMM="0"+subMM}
//转换日//
area=INDate.lastIndexOf(separate)
subDD=INDate.substr(area+1,INDate.length-area-1)
if(isNaN(subDD) || subDD<=0){
return true;
}
if(eval(subDD)<10){subDD="0"+eval(subDD)}
NewDate=subYY+"-"+subMM+"-"+subDD
if(NewDate.length!=10){return true;}
if(NewDate.substr(4,1)!="-"){return true;}
if(NewDate.substr(7,1)!="-"){return true;}
var MM=NewDate.substr(5,2);
var DD=NewDate.substr(8,2);
if(parseInt(MM)>12){return true;}//月份大于12
if((subYY%4==0 && subYY%100!=0)||subYY%400==0){ //判断是否为闰年
if(parseInt(MM)==2){
if(DD>29){return true;}
}
}else{
if(parseInt(MM)==2){
if(DD>28){return true;}
}
}
//根据月份判断最大天数
if(parseInt(MM)==1){if(parseInt(DD)>31){return true;}}
if(parseInt(MM)==3){if(parseInt(DD)>31){return true;}}
if(parseInt(MM)==5){if(parseInt(DD)>31){return true;}}
if(parseInt(MM)==7){if(parseInt(DD)>31){return true;}}
if(parseInt(MM)==8){if(parseInt(DD)>31){return true;}}
if(parseInt(MM)==10){if(parseInt(DD)>31){return true;}}
if(parseInt(MM)==12){if(parseInt(DD)>31){return true;}}
if(parseInt(MM)==2){if(parseInt(DD)>30){return true;}}
if(parseInt(MM)==4){if(parseInt(DD)>30){return true;}}
if(parseInt(MM)==6){if(parseInt(DD)>30){return true;}}
if(parseInt(MM)==9){if(parseInt(DD)>30){return true;}}
if(parseInt(MM)==11){if(parseInt(DD)>30){return true;}}
//以上判断完毕后返回false值
return false;
}
...全文
88 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
江南昆虫 2009-08-24
<script type="text/javascript">
function CheckDate(INDate){
var dnum = Date.parse(INDate.replace('-','/'));
if (isNaN(dnum)){
alert('请正确输入日期!');
} else{
var ind = new Date(dnum);
alert('正确日期:'+ind.getFullYear()+'-'+(ind.getMonth()+1)+'-'+ind.getDate());
}

}
</script>
<input type="text" name="d" id="d" onChange="CheckDate(this.value)" value="2008-10-3" />
回复
wise1979 2009-08-24
能不能在我原来代码的基础上帮我检查一下是什么问题吗?
回复
jbj001 2009-08-24
你那个太麻烦了


桑拿设备网
回复
hookee 2009-08-20

function CheckDate(INDate){
var re = /^\d{4}([\/\-])(0?\d|1[12])\1(0?\d|[1-2]\d|3[01])$/;
if(!re.test(INDate)) return false;
INDate = INDate.replace(/-/g,"/")
var a = INDate.split("/");
var oy = parseInt(a[0],10);
var om = parseInt(a[1],10);
var od = parseInt(a[2],10);
var dt = new Date(INDate);
var y = dt.getFullYear();
var m = dt.getMonth()+1;
var d = dt.getDate();
return (y==oy && m==om && d==od)
}
回复
xb520hh 2009-08-20
直接用一个日历控件,问题都解决了
回复
昔梦无痕 2009-08-20

function IsDate(DateString , Dilimeter)
{
if (DateString==null) return false;
if (Dilimeter==´´ || Dilimeter==null)
Dilimeter = ´-´;
var tempy=´´;
var tempm=´´;
var tempd=´´;
var tempArray;
if (DateString.length<8 && DateString.length>10)
return false;
tempArray = DateString.split(Dilimeter);
if (tempArray.length!=3)
return false;
if (tempArray[0].length==4)
{
tempy = tempArray[0];
tempd = tempArray[2];
}
else
{
tempy = tempArray[2];
tempd = tempArray[1];
}
tempm = tempArray[1];
var tDateString = tempy ´/´ tempm ´/´ tempd ´ 8:0:0´;//加八小时是因为我们处于东八区
var tempDate = new Date(tDateString);
if (isNaN(tempDate))
return false;
if (((tempDate.getUTCFullYear()).toString()==tempy) && (tempDate.getMonth()==parseInt(tempm)-1) && (tempDate.getDate()==parseInt(tempd)))
{
return true;
}
else
{
return false;
}
}
回复
lzp4881 2009-08-20
用日期控件多好,这么麻烦。
回复
发动态
发帖子
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
社区公告
暂无公告