给你一段函数吧。function isDate(field){
/* YYYY/MM/DD or MM/DD/YYYY */
if(field.value.length<3)
return false;

var exp = field.value;
    var re = new RegExp("/|-");
    var col = exp.split(re);       
    var i, m, d, y;
    var charcode;      
    
    switch(col[0].length){
     case 4:
     for(i=0; i<4; i++){
     charcode = col[0].charCodeAt(i);
if(charcode < 48 || charcode > 57)
return false;
     }    
     y = new Number(col[0]);
     m = new Number(col[1]);
d = new Number(col[2]);

//*****************2001-09-07-AM**************************
/* var aaaa=y.length;
   alert(y); 
   alert(m); 
   alert(d);
   alert(aaaa);
   if( y.length != 4 ){
 alert(y);
     return false;
   }  
   if( !( (m.length == 1) || (m.length == 2) ) ){
    alert(m);
 return false;
   }  
   if( !( (d.length == 1) || (d.length == 2) ) ){
    alert(d);
 return false;
   }
*/    
   if(y <= 1900 || y >=3000)
       {
         alert("年份必须大于1900年,小于3000年!");
         return false;
       }
//********************************************************
     if(isNaN(m) || m > 12 || m < 1)
     return false;
    
     if(isNaN(d) || d > 31 || d <= 0)
     return false;         
     break;
     case 1:    
     case 2:
     for(i=0; i<col[2].length; i++){
     charcode = col[2].charCodeAt(i);
if(charcode < 48 || charcode > 57)
return false;
     }     
     y = new Number(col[2]);
     m = new Number(col[1]);
d = new Number(col[0]);
//*****************2001-09-07-AM***************************
/*    if( y.length != 4 )
     return false;
   if( !( (m.length == 1) || (m.length == 2) ) )
     return false;
   if( !( (d.length == 1) || (d.length == 2) ) )
     return false;
*/
   if(y <= 1900 || y >=3000)
       {
         alert("年份必须大于1900年,小于3000年!");
         return false;
       }
//***********************************************************
     if(isNaN(m) || m > 12 || m < 1)
     return false;
     if(isNaN(d) || d > 31 || d <= 0)
     return false;              
     break;
     default:
     return false;      
    }    
    /* check date integrety */            
    if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12){
     if(d > 31 || d <= 0){          
    return false;
    }     
} else if( m == 4 || m == 6 || m == 9 || m == 11 ){
    if(d > 30 || d <= 0){          
    return false;
    }
} else if( m == 2){        
    var bYear = false;
    if(y % 4 == 0 && y % 100 !=0){
    bYear = true;
    } else {
    if(y % 400 == 0)
    bYear = true;
    else
    bYear = false;
    }
    if(bYear){
    if(d > 29)
    return false;
    } else {
    if(d > 28)
    return false;
    }    
} else {
return false;
    }
    return true;
}

解决方案 »

  1.   

    Date.parse(strDate)
    支持的格式:parse 方法
    解析一个包含日期的字符串,并返回该日期与 1970 年 1 月 1 日午夜之间所间隔的毫秒数。Date.parse(dateVal)其中必选项 dateVal 是一个包含以诸如 "Jan 5, 1996 08:47:00" 的格式表示的日期的字符串,或者是一个从 ActiveX(R) 对象或其他对象中获取的 VT_DATE 值。 说明
    parse 方法返回一个整数值,这个整数表示 dateVal 中所包含的日期与 1970 年 1 月 1 日午夜之间相间隔的毫秒数。 parse 方法是 Date 对象的一个静态方法。正因为它是一个静态方法,它是通过下面例子中所示的方法被调用的,而不是作为一个已创建 Date 对象的一个方法被调用。 var datestring = "November 1, 1997 10:15 AM";
    Date.parse(datestring)
    下面这些规则决定了 parse 方法能够成功地解析那些字符串: 短日期可以使用“/”或“-”作为日期分隔符,但是必须用月/日/年的格式来表示,例如"7/20/96"。 
    以 "July 10 1995" 形式表示的长日期中的年、月、日可以按任何顺序排列,年份值可以用 2 位数字表示也可以用 4 位数字表示。如果使用 2 位数字来表示年份,那么该年份必须大于或等于 70。 
    括号中的任何文本都被视为注释。这些括号可以嵌套使用。 
    逗号和空格被视为分隔符。允许使用多个分隔符。 
    月和日的名称必须具有两个或两个以上的字符。如果两个字符所组成的名称不是独一无二的,那么该名称就被解析成最后一个符合条件的月或日。例如,"Ju" 被解释为七月而不是六月。 
    在所提供的日期中,如果所指定的星期几的值与按照该日期中剩余部分所确定的星期几的值不符合,那么该指定值就会被忽略。例如,尽管 1996 年 11 月 9 日实际上是星期五,"Tuesday November 9 1996" 也还是可以被接受并进行解析的。但是结果 Date 对象中包含的是 "Friday November 9 1996"。 
    JScript 处理所有的标准时区,以及全球标准时间 (UTC) 和格林威治标准时间 (GMT)。 
    小时、分钟、和秒钟之间用冒号分隔,尽管不是这三项都需要指明。"10:"、"10:11"、和 "10:11:12" 都是有效的。 
    如果使用 24 小时计时的时钟,那么为中午 12 点之后的时间指定 "PM" 是错误的。例如 "23:15 PM" 就是错误的。 
    包含无效日期的字符串是错误的。例如,一个包含有两个年份或两个月份的字符串就是错误的。 
    示例
    下面这个例子说明了 parse 方法的用法: function GetTimeTest(testdate){
       var s, t;                    // 声明变量。
       var MinMilli = 1000 * 60;       // 初始化变量。
       var HrMilli = MinMilli * 60;
       var DyMilli = HrMilli * 24;
       t = Date.parse(testdate);       // 解析 testdate。
       s = "There are "                // 创建返回的字符串。
       s += Math.round(Math.abs(t / DyMilli)) + " days "
       s += "between " + testdate + " and 1/1/70";
       return(s);                      // 返回结果。
    }
    要求
      

  2.   

    转载:
    <html>
    <head>
    <title>效验日期</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <SCRIPT LANGUAGE="JavaScript"><!-- Begin
    function check_date(field){
    var checkstr = "0123456789";
    var DateField = field;
    var Datevalue = "";
    var DateTemp = "";
    var seperator = ".";
    var day;
    var month;
    var year;
    var leap = 0;
    var err = 0;
    var i;
       err = 0;
       DateValue = DateField.value;
       /* Delete all chars except 0..9 */
       for (i = 0; i < DateValue.length; i++) {
      if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
         DateTemp = DateTemp + DateValue.substr(i,1);
      }
       }
       DateValue = DateTemp;
       /* Always change date to 8 digits - string*/
       /* if year is entered as 2-digit / always assume 20xx */
       if (DateValue.length == 6) {
          DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
       if (DateValue.length != 8) {
          err = 19;}
       /* year is wrong if year = 0000 */
       year = DateValue.substr(4,4);
       if (year == 0) {
          err = 20;
       }
       /* Validation of month*/
       month = DateValue.substr(2,2);
       if ((month < 1) || (month > 12)) {
          err = 21;
       }
       /* Validation of day*/
       day = DateValue.substr(0,2);
       if (day < 1) {
         err = 22;
       }
       /* Validation leap-year / february / day */
       if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
          leap = 1;
       }
       if ((month == 2) && (leap == 1) && (day > 29)) {
          err = 23;
       }
       if ((month == 2) && (leap != 1) && (day > 28)) {
          err = 24;
       }
       /* Validation of other months */
       if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
          err = 25;
       }
       if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
          err = 26;
       }
       /* if 00 ist entered, no error, deleting the entry */
       if ((day == 0) && (month == 0) && (year == 00)) {
          err = 0; day = ""; month = ""; year = ""; seperator = "";
       }
       /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
       if (err == 0) {
          DateField.value = day + seperator + month + seperator + year;
       }
       /* Error-message if err != 0 */
       else {
          alert("Date is incorrect!");
          DateField.select();
      DateField.focus();
       }
    }
    //  End -->
    </script></HEAD><BODY bgcolor="#FFFFFF" text="#000000">
    <CENTER>
      效验日期 
      <FORM name="datecheck">
    <TABLE border="0" width="60%">
        <TR>
       <TD>
        Enter Date (Use European format shown at right)<P>
       <INPUT type="text" name=testdat size='10' maxlength="10" onblur="check_date(this)">
       <INPUT type= "submit" name="button" value="Press to Validate"><p>
    (Date is validated after leaving the field.)
        </TD>
        <TD>
       <b>ddmmyy</b> (171201)   or <BR>
       <b>ddmmyyyy</b> (17122001) or <BR>
       <b>ddXmmXyy</b> (17-12-01 or 17y12q01 ... ) or <BR>
       <b>ddXmmXyyyy</b> (17.12.2001 or 17,12,2001 ...) <br>
       where "X" is any sign not in 0..9, i.e. "-" or "/"<p>
       </TD>
        </TR>
    </TABLE>
    </FORM>
    </CENTER>
    </body>
    </html>
      

  3.   

    哗,一个函数不用这么复杂吧!
    function isDate(sDate)
    { sDate = sDate.toString();
    sDate = sDate.replace("-","/"); var d = new Date(Date.parse(sDate)); if(!isNaN(d))
    return true;
    else
    return false;
    }
      

  4.   

    ....
    function isDate(variant)
    {
          return !isNaN(new Date(variant).getTime());
    }