1.使用正则表达式 /// <summary> /// 校验具有value属性的控件的value年月日字符串是否合法(Date:YYYY-MM-DD),不合法就给出提示信息并使其获得焦点。 /// </summary> /// <param name="date">待较验的年月日字符串</param> /// <returns>True,合法;False:不合法,并返回错误信息:message</returns> /// 使用方法:ID指控件的ID标识;onBlur:失去焦点 /// onBlur="javascript:IsValidDate(ID);" function IsValidDate(ID) { var sDate=ID.value.replace(/(^\s+|\s+$)/g,""); //去两边空格; if(sDate=="") return true; //如果格式满足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)MM-(/)D就替换为"" //数据库中,合法日期可以是:YYYY-MM/DD(2003-3/21),数据库会自动转换为YYYY-MM-DD格式 var s = sDate.replace(/[\d]{4,4}[\-/]{1}[\d]{1,2}[\-/]{1}[\d]{1,2}/g,""); if (s=="") //说明格式满足YYYY-MM-DD或YYYY-M-DD或YYYY-M-D或YYYY-MM-D { var t=new Date(sDate.replace(/\-/g,"/")); var ar = sDate.split(/[-/ :]/); var k = false; if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate()) k = true; if(k) { alert("错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。"); ID.focus(); return false; } } else { alert("错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。"); ID.focus(); return false; } return true; }
function isDate(strDate){ var yy=strDate.substring(0,4); var mm=strDate.substring(5,7); var dd=strDate.substring(8,10); if(!isPosInteger(yy) || !isPosInteger(mm) || !isPosInteger(dd)){ return false }
function dateJuge(Object){
re=/(1|2)(\d\d\d)\/(0|1)(\d)\/(0|1|2|3)(\d)-(1|2)(\d\d\d)\/(0|1)(\d)\/(0|1|2|3)(\d)/;
//re=/2003-01-01/;
if((!re.test(Object.value))&&!(String(Object.value).length==0)){
alert("输入格式错误,请重新输入!格式为:'2003/01/01-2003/03/03'");
Object.value="";
Object.focus();
}
else{
var month1=String(Object.value).substring(5,7);
var month2=String(Object.value).substring(16,18);
var day1=Number(String(Object.value).substring(8,10));
var day2=Number(String(Object.value).substring(19,21));
var year1=Number(String(Object.value).substring(0,4))%4;
var year2=Number(String(Object.value).substring(11,15))%4;
if(!monthJuge(year1,month1,day1)||!(monthJuge(year2,month2,day2))){
alert("输入错误,请重新输入!");
Object.value="";
Object.focus();
}
startDate=new Date(Object.value.substring(0,10));
endDate=new Date(Object.value.substring(11,21));
var second=endDate-startDate;
var day=second/86400000;
if(day<=0){
alert("日期错误,请重新收入!");
Object.value="";
Object.focus();
}
Object.style.background="#FFFFFF";
}
};
function monthJuge(year,month,day){
if(month>12)
{return false;}
if(month==4||month==6||month==9){
if(day>30)
return false;
else
return true;
}
else if(month==2)
{
if(year==0&&day>29)
return false;
else if(day>28)
return false;
else
return true;
}
else{
if(day>31)
return false;
else
return true;
}
}
如果是在服务器端用JScript,切换到VBs中判断日期合法性可不是很好哦!
/// <summary>
/// 校验具有value属性的控件的value年月日字符串是否合法(Date:YYYY-MM-DD),不合法就给出提示信息并使其获得焦点。
/// </summary>
/// <param name="date">待较验的年月日字符串</param>
/// <returns>True,合法;False:不合法,并返回错误信息:message</returns>
/// 使用方法:ID指控件的ID标识;onBlur:失去焦点
/// onBlur="javascript:IsValidDate(ID);"
function IsValidDate(ID)
{
var sDate=ID.value.replace(/(^\s+|\s+$)/g,""); //去两边空格;
if(sDate=="")
return true;
//如果格式满足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)MM-(/)D就替换为""
//数据库中,合法日期可以是:YYYY-MM/DD(2003-3/21),数据库会自动转换为YYYY-MM-DD格式
var s = sDate.replace(/[\d]{4,4}[\-/]{1}[\d]{1,2}[\-/]{1}[\d]{1,2}/g,"");
if (s=="") //说明格式满足YYYY-MM-DD或YYYY-M-DD或YYYY-M-D或YYYY-MM-D
{
var t=new Date(sDate.replace(/\-/g,"/"));
var ar = sDate.split(/[-/ :]/);
var k = false;
if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate())
k = true;
if(k)
{
alert("错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。");
ID.focus();
return false;
}
}
else
{
alert("错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。");
ID.focus();
return false;
}
return true;
}
var yy=strDate.substring(0,4);
var mm=strDate.substring(5,7);
var dd=strDate.substring(8,10);
if(!isPosInteger(yy) || !isPosInteger(mm) || !isPosInteger(dd)){
return false
}
if(parseInt(yy,10)<1900 || parseInt(yy,10)>2050){
return false
}
if(parseInt(mm,10)<1 || parseInt(mm,10)>12){
return false
}
var dPrevDate = new Date(yy, mm, 0);
var maxd=dPrevDate.getDate();
if(parseInt(dd,10)<1 || parseInt(dd,10)>maxd){
return false
}
return true
}
function isdate(strDate){
var strSeparator = "-"; //日期分隔符
var strDateArray;
var intYear;
var intMonth;
var intDay;
var boolLeapYear; strDateArray = strDate.split(strSeparator); if(strDateArray.length!=3) return "false"; intYear = parseInt(strDateArray[0],10);
intMonth = parseInt(strDateArray[1],10);
intDay = parseInt(strDateArray[2],10); if(isNaN(intYear)||isNaN(intMonth)||isNaN(intDay)) return "false"; if(intMonth>12||intMonth<1) return "false"; if((intMonth==1||intMonth==3||intMonth==5||intMonth==7||intMonth==8||intMonth==10||intMonth==12)&&(intDay>31||intDay<1)) return "false"; if((intMonth==4||intMonth==6||intMonth==9||intMonth==11)&&(intDay>30||intDay<1)) return "false"; if(intMonth==2){
if(intDay<1) return "false"; boolLeapYear = false;
if((intYear%100)==0){
if((intYear%400)==0) boolLeapYear = true;
}
else{
if((intYear%4)==0) boolLeapYear = true;
} if(boolLeapYear){
if(intDay>29) return "false";
}
else{
if(intDay>28) return "false";
}
} return "true";
}//自动增加'-'用于日期input输入框
function add_sign(field) {
if (field.value.length==4){
field.value= field.value+"-"
}
if (field.value.length==7){
field.value = field.value+"-"
}
if (field.value.length==10 ){
if (isdate(field.value)=="false"){
field.value ="";
field.focus();
window.alert ("日期格式不对!(YYYY-MM-DD)");
}
if (isdate(field.value)!="false"){
getNextElement(field).focus();
}
}
}//自动跳转到下一个输入框
function getNextElement (field) {
var form = field.form;
for (var e = 0; e < form.elements.length; e++)
if (field == form.elements[e])
break;
return form.elements[++e % form.elements.length];
}
function outday(year,month){
date=year+"-"+month+"-"+"31"
if (isdate(date)=="true"){
return 31;}
else {
date=year+"-"+month+"-"+"30"
if (isdate(date)=="true"){
return "30";}
else {
date=year+"-"+month+"-"+"29"
if (isdate(date)=="true"){
return "29";}
else
return "28";
}
}
}
//返回两个时间的天数:要求比较的时间的格式为:YYYY-MM-DD
function better_time(strDateStart,strDateEnd){
var strSeparator = "-"; //日期分隔符
var strDateArrayStart;
var strDateArrayEnd;
var intDay
strDateArrayStart = strDateStart.split(strSeparator);
strDateArrayEnd = strDateEnd.split(strSeparator);
var strDateS = new Date(strDateArrayStart[0] + "/" + strDateArrayStart[1] + "/" + strDateArrayStart[2]);
var strDateE = new Date(strDateArrayEnd[0] + "/" + strDateArrayEnd[1] + "/" + strDateArrayEnd[2]);
intDay = (strDateS-strDateE)/(1000*3600*24)
return intDay
}