你的日期是怎么输入的呢:
<input type =text name = mon onchange=check(this)>
<input type =text name = day >
<script language = javascript>
  function check(id) //判断月份输入是否正确函数
 {
  if (id.value =='')
   {
    alert("please enter character!");
    id.focus();
    return false;  
   }
   dights='0123456789';
   for (i=1 ;i<=id.value.length;i++)
   {
     if (dights.indexOf(id.value.substr(i,1))==-1)
     {
       alert('只能输入数字');
       id.value ='';
       id.focus();
       return false;
     }
    }
    if ((id.value>12)||(id.value<1))
   {
     alert("月份输入错误!");
     id.value = '';
     id.focus();
     return false;
   }
 }
</script>
判断日的自己按照上面应该可以写出来

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/1766/1766400.xml?temp=.1693079
      

  2.   

    <script>
    function CheckDateTime(str){  
        var reg = /^(\d+)-(\d{1,2})-(\d{1,2})$/; 
        var r = str.match(reg); 
        if(r==null)return false; 
        r[2]=r[2]-1; 
        var d= new Date(r[1], r[2],r[3]); 
        if(d.getFullYear()!=r[1])return false; 
        if(d.getMonth()!=r[2])return false; 
        if(d.getDate()!=r[3])return false;  
        return true;
    }
    alert(CheckDateTime("2003-5-23"))
    alert(CheckDateTime("2003-5-32"))
    </script>
      

  3.   

    <form name=f>
    <input type =text name=d value="2003-5-23" onblur="vbscript:alert(isDate(f.d.value))">
    </form>
      

  4.   

    <input onChange="jnkc=this.value;execScript('jnkc=isDate(jnkc)','VBScript');alert(jnkc?'合格日期':'不合格')">
      

  5.   

    阿信的不错
    直接用isdate吧
    不过它是VBS的,
    不是JS在ASP里,都比较好用的,
      

  6.   

    写一个 <javascript> 控制一下就可以的
    难题不在于格式的判断 主要是 闰月的 判断 ^_^
      

  7.   

    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
    }
      

  8.   

    function isDate(datestr, Dilimeter)
    {
     var lthdatestr
     if (datestr != '')
    lthdatestr= datestr.length ;
     else
    lthdatestr=0; if (Dilimeter=='' || Dilimeter==null)
    Dilimeter = '/'; var tmpy='';
     var tmpm='';
     var tmpd='';
     //var datestr;
     var status;
     status=0;
     if ( lthdatestr== 0)
    return true;
     for (i=0;i<lthdatestr;i++) 
     {
    if (datestr.charAt(i)== Dilimeter) {status++; }
    if (status>2) { return false; }
    if ((status==0) && (datestr.charAt(i)!='/')) { tmpy=tmpy+datestr.charAt(i) }
    if ((status==1) && (datestr.charAt(i)!='/')) { tmpm=tmpm+datestr.charAt(i) }
    if ((status==2) && (datestr.charAt(i)!='/')) { tmpd=tmpd+datestr.charAt(i) }
     }
     year=new String (tmpy);
     month=new String (tmpm);
     day=new String (tmpd)
     if ((tmpy.length!=4) || (tmpm.length>2) || (tmpd.length>2)) { return false; }
     if (!((1<=month) && (12>=month) && (31>=day) && (1<=day)) ) { return false; }
     if (!((year % 4)==0) && (month==2) && (day==29)) { return false; }
     if ((month<=7) && ((month % 2)==0) && (day>=31)) { return false; }
     if ((month>=8) && ((month % 2)==1) && (day>=31)) { return false; }
     if ((month==2) && (day==30)) { return false; }
     return true;
    }
      

  9.   

    不好意思,最后三个'/'均应改为Dilimeter
      

  10.   

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

  11.   

    说明:附加的方法isDate可接受多种日期格式,不够请自己加
    不是日期将返回加(false),成功则返回日期对象。
    若需严格的考察该日期对象是否与输入的一致,可参照楼上fason(【阿信(你是我的温柔)】) 的回复,逐个比较日期成分/*** 简单的日期检查,成功返回日期对象 ***/
    String.prototype.isDate = function() {
      var p;
      var re1 = /(\d{4})[年./-](\d{1,2})[月./-](\d{1,2})[日]?$/;
      var re2 = /(\d{1,2})[月./-](\d{1,2})[日./-](\d{2})[年]?$/;
      var re3 = /(\d{1,2})[月./-](\d{1,2})[日./-](\d{4})[年]?$/;
      if(re1.test(this)) {
        p = re1.exec(this);
        return new Date(p[1],p[2],p[3]);
      }
      if(re2.test(this)) {
        p = re2.exec(this);
        return new Date(p[3],p[1],p[2]);
      }
      if(re3.test(this)) {
        p = re3.exec(this);
        return new Date(p[3],p[1],p[2]);
      }
      return false;
    }