以前写的两个函数:function  getDateByMask(s,m){  
if (s.length!=m.length){
return false;
}
try{
m=m.replace(/Y/g,"y").replace(/D/g,"d");
if (m.indexOf("yyyy")>-1) 
return  new  Date(
s.substr(m.indexOf("yyyy"),4),
s.substr(m.indexOf("MM"),2)-1,
s.substr(m.indexOf("dd"),2)
)
else return  new  Date(
s.substr(m.indexOf("yy"),2),
s.substr(m.indexOf("MM"),2)-1,
s.substr(m.indexOf("dd"),2)
)
}
catch (e)
{
return null;
}
}
/*
test:
alert(getDateByMask("2002/02/01","yyyy/MM/dd"))
alert(getDateByMask("02/02/01","yy/MM/dd"))
*/function  checkDateByMask(s,m){
if (s.length!=m.length){
return false;
}
try{
var d = getDateByMask(s,m)
m=m.replace(/Y/g,"y").replace(/D/g,"d");
if (m.indexOf("yyyy")>-1) 
return  (
d.getFullYear() == s.substr(m.indexOf("yyyy"),4)
&& d.getMonth() == s.substr(m.indexOf("MM"),2)-1
&& d.getDate() == s.substr(m.indexOf("dd"),2)
)
else return  (
d.getYear() == s.substr(m.indexOf("yy"),2)
&& d.getMonth() == s.substr(m.indexOf("MM"),2)-1
&& d.getDate() == s.substr(m.indexOf("dd"),2)
)
}
catch (e)
{
return false;
}
}
/*
test:
alert(checkDateByMask("2002/02/01","yyyy/MM/dd"))
alert(checkDateByMask("02/02/01","yy/MM/dd"))
alert(checkDateByMask("2002/13/01","yyyy/MM/dd"))
alert(checkDateByMask("02/02/30","yy/MM/dd"))
*/

解决方案 »

  1.   

    <script language="javascript">
    function isDate(sDate)
    {
    var reDate=/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/;
    if(!reDate.test(sDate)) return false;
    var y=parseInt(RegExp.$1), m=parseInt(RegExp.$2), d=parseInt(RegExp.$3);
    if(m>12 || d>31) return false;
    var sMonth="4|6||9|11";
    if(sMonth.indexOf(String(m))!=-1 && d==31) return false;
    if((y%4!=0 || (y%4==0 && y%400!=0)) && m==2 && d>28) return false;
    return true;
    }
    alert(isDate("1983-02-29"));
    alert(isDate("1982-09-22"));
    </script>
      

  2.   

    一段秋水的代码:<script language=javascript>
    function strDateTime(str)
    {
       var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/; 
       var r = str.match(reg); 
       if(r==null)return false; 
       var d= new Date(r[1], r[3]-1,r[4]); 
       var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate()
       return newStr==str
    }
    alert(strDateTime("2002-1-31"))
    alert(strDateTime("2002-1-41"))
    </script>
      

  3.   

    /*** 简单的日期检查,成功返回日期对象 ***/
    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;
    }
      

  4.   

    不是yyyy-mm-dd格式吗,怎么还有人检测yyyy-m-dd也对