// 根据年、月返回天数
function GetDay(varYear, varMonth)
{
    var lngDay

varYear = parseInt(varYear)
varMonth = parseInt(varMonth)    switch (varMonth) {
    case 1 :
    case 3 :
    case 5 :
    case 7 :
    case 8 :
    case 10 :
    case 12 :
        lngDay = 31
        break
    case 4 :
    case 6 :
    case 9 :
    case 11 :
        lngDay = 30
        break
    case 2 :
        if ((varYear % 4 == 0 && varYear % 100 != 0) || (varYear % 400 == 0))
            lngDay = 29
        else
            lngDay = 28
        break
    } // switch
    return lngDay
}// 日期是否正确
function CheckDate(obj)
{
var strDate, arrDate
var lngYear, lngMonth, lngDay
var strReg
var strError strError = ""
strReg = /^\d{4}-\d{2}-\d{2}$/;
strDate = obj.value arrDate = strDate.split("-")
if (strReg.test(strDate)) {
lngYear = parseInt(arrDate[0], 10)
lngMonth = parseInt(arrDate[1], 10)
lngDay = parseInt(arrDate[2], 10)// alert(lngYear + "," + lngMonth + "," + lngDay)
// return
}

if (!strReg.test(strDate)) {
strError = "格式错误!\n正确格式: yyyy-mm-dd"
}
else if (lngMonth < 1 || lngMonth > 12) {
strError = "月份应在01-12之间!"
}
else if (lngDay < 1 || lngDay > GetDay(lngYear, lngMonth)) {
strError = "天数应在01-" + GetDay(lngYear, lngMonth) +"之间!"
} if (strError != "") {
alert(strError)
obj.select()
obj.focus()
}
}

解决方案 »

  1.   

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

  2.   

    调用方法:<input name="txtOccurDateF" type="text" id="txtOccurDateF" onBlur="CheckDate(this)" size="10" maxlength="10">
    你可以根据自己的要求定义。
      

  3.   

    checkdate
    验证日期的正确性。语法: int checkdate(int month, int day, int year);传回值: 整数函式种类: 时间日期
     
     
    内容说明 
    若日期是有效的则传回 true,若日期有问题,则传回 false。本函式可以用来检查日期是否有效。有效范围如下:年 为 0 至 32767 年
    月 为 1 至 12 月
    日 则随着月份及闰年变化
      

  4.   

    非常感谢各位的指点。飞鸟和indeed的方法似乎要分别取得年、月、日,但取得的本身就是很大的问题。唠叨的方法较简练。是用一个类是吗?呵呵,我不太懂的,但不知这个类的原型是怎么样的?可以直接用吗?不需要引入什么头文件吗?
      

  5.   

    我原来是这样想的:用date()取出年,月,日,转成数值,然后用checkdate判断。但奇怪的是,date总是返回1970年1月1日。费解?!
      

  6.   

    做日期校验首先应在客户端进行,我给出的代码是给字符串定义方法
    引用格式
    "2003-04-01".isDate()
      

  7.   

    <form name="form1" method="post" action="<?php_self?>">
      <input type="text" name= getdate>
      <input type="submit" name="Submit" value="Submit">
    然后呢?直接把你上面那一段加上去吗?好象会报错呀
      

  8.   

    使用时是不是应该这样写:
    if ($getdate.isDate()){}else{
          echo "数据格式无效"
    }
      

  9.   

    不是,那是javascript的代码。如果要在php中校验反到比较麻烦了。
    js:
    if(! inputvalue.isDate())
      alert("数据格式无效")
      

  10.   

    用正则表达式匹配日期,然后checkdate,date()函数是返回系统日期,默认是1970年1月1日,所有日期时间函数都是以这个为准。
      

  11.   

    list ($year, $month, $day) = split ('[/:.-]', $row[timebe]);
    if (checkdate($month, $day, $year)
        echo '正确';
    else
        echo '错误';
      

  12.   

    如果系统装有mysql数据库,放到mysql数据库里云校验很不错的