我要做的功能是,有两个时间选择器,可以选择开始时间和结束时间。
开始时间和结束时间的差不能超过6个月。下面是我的程序部分代码:
          var from = document.getElementById("startTime").value.replace("-","/");
          var to = document.getElementById("endTime").value.replace("-","/");  
          
          //from = "2009-02-28 10:00";    
          //to =   "2009-08-31 10:00";                dt1 = new Date(Date.parse(from));
          dt2 = new Date(Date.parse(to))          dt2.setMonth(dt2.getMonth() - 6);//这里减6个月
                    if (dt2.getTime() > dt1.getTime()) {
              alert("时间范围不能超过6个月");
              return false;
          }有些问题,不知道怎么解决。如
开始时间:2009-02-28 10:00,
结束时间:2009-08-31 10:00,
上面的两个时间差正好是6个整月.
可是还是提示:"时间范围不能超过6个月"

解决方案 »

  1.   

    你用alert分别打印出 dt2.getTime() 和 dt1.getTime()) 
    你这样一减只是月份被减了,日期作为比较已经是超出 6  个月了
      

  2.   


    from = "2009-02-28 10:00";    
    to =  "2009-08-31 10:00";  from = from.split(" ")[0];
    to = to.split(" ")[0];dt1 = new Date(from.replace(/-/g,"/"));
    dt2 = new Date(to.replace(/-/g,"/")); 
    y1 = dt1.getFullYear();
    m1 = dt1.getMonth();
    d1 = dt1.getDate();
    sld = new Date(y1,m1+1,0);
    dt = new Date(y1,m1+6,d1);
    eld = new Date(y1,m1+7,0);if(sld.getDate()==dt1.getDate()){
       if(eld.getDate()>dt.getDate()) dt = eld;   
    }if(dt2 > dt) alert("不能超过6个月")
      

  3.   


    主要不知道楼主的6个月是什么概念,是按日历上的6个月算 还是就是按固定一月30天来算几个月的?
    <script type="text/javascript">
    <!--
            function getDiffDate(m){
    m-=(MN=parseInt(m/2592000000))*2592000000;
                m-=(D=parseInt(m/86400000))*86400000;
                m-=(H=parseInt(m/3600000))*3600000;
                S=parseInt((m-=(M=parseInt(m/60000))*60000)/1000);
                return MN + '月' +  D+'天'+H+'时'+M+'分'+S+'秒';
            } alert(getDiffDate(new Date('2009/08/31 10:00') - new Date('2009/02/28 10:00')));
    //-->
    </script>
      

  4.   


    <script type="text/javascript">
    <!--
            function getDiffDate(m){
                m-=(D=parseInt(m/86400000))*86400000;
                m-=(H=parseInt(m/3600000))*3600000;
                S=parseInt((m-=(M=parseInt(m/60000))*60000)/1000);
                return D+"."+H+M+S;
            }

    var str =  new Date(2009, 03, 0).getDate() + new Date(2009, 04, 0).getDate()
    +new Date(2009, 05, 0).getDate()+new Date(2009, 06, 0).getDate()
    +new Date(2009, 07, 0).getDate()+ new Date(2009, 08, 0).getDate()
    alert("相差天数" + parseFloat(getDiffDate(new Date('2009/08/31') - new Date('2009/02/28'))) +
        "共有天数" + parseFloat(str));
            if(parseFloat(getDiffDate(new Date('2009/08/31') - new Date('2009/02/28'))) > parseFloat(str)){
    alert('over')
    }
    //-->
    </script>
      

  5.   

    开始时间:YYYY-MM-DD 10:00,
    取出月份MM,加6
    var newMonth=MM+8
    中间做判断,newMonth>12时,newMonth 减12;同时YYYY+1
    newMonth=newMonth>12?newMonth-12:newMonth 
    var newYear=newMonth>12?YYYY+1:YYYY
    var newDay 找到newMonth的最后一天
    结束时间:newYear-newMonth-newDay  9:59,具体代码自己实现
      

  6.   

    http://blog.csdn.net/taoyuan0908/archive/2009/05/15/4187403.aspx
      

  7.   


    s_liangchao1s的解决方案和我的要求是一样的,不过太复杂了。我是做java的,平时也写js。要是用java几行代码就能搞定。下午我试一下,谢谢大家了,问题解决后回来结贴。
      

  8.   

    判断两个日期是否相差指定的自然月<script>
    //本脚本功能是:以dt2为基准,判断dt1是否在指定的自然月内(本脚本中日期跨度为6个月)
    //基本思想是:以dt2为基准,向前减去(6个月 乘以 每个月)的自然天数。
              var dt1 = new Date(Date.parse("2009/02/1 10:10"));
              var dt2 = new Date(Date.parse("2009/08/1 10:10"))
              //alert("dt1:" + dt1.getFullYear() + "-" + (dt1.getMonth() + 1) + "-" + dt1.getDate());
              //alert("dt2:" + dt2.getFullYear() + "-" + (dt2.getMonth() + 1) + "-" + dt2.getDate());
              
              var from = new Date(dt1.getFullYear(), dt2.getMonth()+1-6, 0); //6个月
              var to   = new Date(dt2.getFullYear(), dt2.getMonth()+1, 0);
              //alert("from:" + from.getFullYear() + "-" + (from.getMonth() + 1) + "-" + from.getDate());
              //alert("to:" + to.getFullYear() + "-" + (to.getMonth() + 1) + "-" + to.getDate());
              
              var interval = to.getTime() - from.getTime();
              dt2.setTime((dt2.getTime() - interval))/(24*60*60*1000);
              alert("dt2:" + dt2.getFullYear() + "-" + (dt2.getMonth() + 1) + "-" + dt2.getDate());
           
              if (dt2.getTime() > dt1.getTime()) {
               alert("over");
              } else {
                  alert("ok");
              }
    </script>