本帖最后由 yacity 于 2010-10-17 20:32:28 编辑

解决方案 »

  1.   

    var mm=new Array(1,3,5,7,8,10,12); 
    这一段代码,测试的时候输入1,3,5,7,10,12 月份 的31日 都没有错。
    单独输入8月31就提示出错。
    另外 如果把中间任意一个月份去掉,他就会提示该月份的31日有错。
    单单是不知道为什么 不能输入 8月31日。强烈郁闷中。
      

  2.   

    试试var mm=new Array(0,2,4,6,7,9,11);  //js中的月是从0开始的
      

  3.   

    //转换月份  subMM=INDate.substr(area+1,INDate.indexOf(separate,area+1)-(area+1))  if(isNaN(subMM) || subMM<=0){  return true;  }  if(subMM.length<2){subMM="0"+subMM}改为
    //转换月份  subMM= parseInt( INDate.substr(area+1,INDate.indexOf(separate,area+1)-(area+1)) ) - 1;
      

  4.   

    谢谢 sohighthesky 和 wz_307 的帮忙,还是不行呢~!期待中.
      

  5.   

    subMM= parseInt( INDate.substr(area+1,INDate.indexOf(separate,area+1)-(area+1)) ) - 1; 
    这样子以后 连9月1 日都不行了。
      

  6.   

    你试试2009-08-33
    试试能过吗?
    要能过,说明你的return 写反了,我没读代码,只是看了
    if (INDate==""){return false;}和
    if(parseInt(DD)>31){  return true;
    我感觉都是错误的情况,你返回一个是true,一个是false
      

  7.   

    每次获取月份加上 1 date().getMonth()+1
      

  8.   

    var mm=new Array(1,3,5,7,8,10,12);  
    这一段时用来判断最大天数的,既然已经包含有8月份,
    为什么 实际运行 还是不能输入8-31?
      

  9.   

    不知道你们又没有一一测试?
    var mm=new Array(0,2,4,6,7,9,11); //js中的月是从0开始的
    这样的结构 岂不是 2,4,6,7,9,11 包含31号???我改了一下 
     var mm=new Array(0,1,3,5,7,8,10,12);1,3,5,7,8,10,12 月份 31日 全部通过测试可是这样问题又来了 输入 2010-9-31 结果是通过了,然后  asp代码准备把日期添加到数据库,然后SQL数据库出错了~!
      

  10.   

    js中的月份是从0开始的
    即0 -> 1月; 1 -> 2月; ... ; 11 -> 12月所以说到底, 你输入时是实际月份, 而传递给js的时候要转换成js中的月份, lz再仔细想一下就行了
      

  11.   

    你这个写得有点复杂哦...
    function CheckDate(sDate){
    var date = new Date(sDate);
    var arr = sDate.split("/");
    if(arr[0] == date.getFullYear().toString() 
    || arr[1] == (date.getMonth() + 1).toString()
    || arr[2] == date.getDate().toString()){
    return true;
    }
    return false;
    }
    alert(CheckDate("2010/10/12"));
    alert(CheckDate("2010/10/123"));
      

  12.   


    function CheckDate(sDate){
    var date = new Date(sDate);
    var arr = sDate.split("/");
    if(arr[0] == date.getFullYear().toString() 
    && arr[1] == (date.getMonth() + 1).toString()
    && arr[2] == date.getDate().toString()){
    return true;
    }
    return false;
    }
    alert(CheckDate("2010/10/12"));
    alert(CheckDate("2010/10/32"));上面的错了 
      

  13.   

    这个可以看一下:关于日期的验证
    http://student.csdn.net/space.php?uid=119638&do=thread&id=8138
      

  14.   

    感谢大家的帮助
    可是 var mm=new Array(0,2,4,6,7,9,11); 也不能解决 8月31日的问题,无论如何都不能输入8月31日。
    期待解决中。
      

  15.   

    本帖最后由 net_lover 于 2010-10-22 08:36:50 编辑
      

  16.   

    本帖最后由 net_lover 于 2010-10-22 15:38:50 编辑
      

  17.   

    本帖最后由 net_lover 于 2010-10-22 16:09:52 编辑
      

  18.   

    对如下这段代码不解,还望见教
    var DA = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
      

  19.   

    var DA = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    13个数,对应12个月每月的总天数。方便处理,单第一个0是没用,只是占位
      

  20.   

    很感谢你及时指教,第一眼也认为是一年中每月的总天数,但数了下DA.size=13,就有点蒙胧了
      

  21.   

    谢谢 net_lover 的帮助 貌似可以用了。
    但是我的水平实在是有限,
    因为我的表单还得检测很多东西,
    所以写了一个总的 checkxiaoshou 函数来调用checkdate。
    比如以下方法,为什么就不行了呢?function checkxiaoshou() {        if (document.form1.sdate.value=="")
               {
               alert("请输入销售日期!");
               return false;
               }
      
      
      
       if(CheckDate(document.form1.sdate.value))
       {
          alert("您输入的销售日期不正确!");document.form1.sdate.focus();return false;   }
    }还有 我这检查日期的函数 checkDate  默认 不输入日期是合法的,因为有时候在查询的时候,不输入日期表示不限制日期,所以不输入日期也要可以通过,当检测到有日期的时候才对他进行检测。如何改写呢?
      

  22.   

    感觉楼主把问题想复杂了,如果你硬要以你自己的思路来完成。从这几个方面去检查一下。
    1,是不是把月分搞错了,js中的月份是从0开始的。
    2,当你在里面做判断时,如果要转化为数字类型的整型数,你要用parseInt('08',10)如果前面没有以0开头到是没关系的。
      

  23.   

    不输入日期也通过?那么这么写if (document.form1.sdate.value=="")
      {
        return true;
      }