其实自己做也不难。你把日期里的各个域设置到Data对象的一个实例里对应的域,再取出来看看是不是一样的就行了。什么闰年啊之类的问题通通交给Data类去处理,自己压根不用操心。

解决方案 »

  1.   

    我自己写了一个,当然还不太成熟,这是一个判断起止日期的,我想看了之后一个日期的你肯定会用了,(只做参考)
    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;
    }
    }
      

  2.   

    唠叨说的那个方法不是挺好么?很简单呀。
    如果是在服务器端用JScript,切换到VBs中判断日期合法性可不是很好哦!
      

  3.   

    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;
    }
      

  4.   

    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
    }

    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
    }
      

  5.   

    我使用的有关日期各个函数:
    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
    }