这是一个计算调休时间的表单---表单有开始时间和结束时间,但输入完成时给出总时长,一天算8小时,不足一天的与上班时间及下班时间比较上班9:10下班18:00,中午12-13休息不算在内,但是如果上班中途休息的就需要和上班时间及下班时间比较了!目前写了部分但是有的时间可以有的就是错的求救啊
//上班时间
var startwork=" 09:10:00";
var endwork=" 18:00:00";//下班时间
var endmoon=" 12:00:00";//中午下班时间
var startnoon=" 13:00:00";//下午上班时间
var hour=0;
var days=0;
               //获取页面的开始时间及结束时间
var staDate =new Date($(dialog).find("#attStaDate").val().replace(/-/g, "/"));
var endDate =new Date($(dialog).find("#attEndDate").val().replace(/-/g, "/"));
var ed=$(dialog).find("#attEndDate").val().replace(/-/g, "/")
var sd=$(dialog).find("#attStaDate").val().replace(/-/g, "/");
var startDay=sd.substring(0,sd.length-9);
var endDay=ed.substring(0,ed.length-9);
var hours=0;
var min=0;
var mn=0;
//判断当天是否到达公司
if((new Date(startDay+startwork)).getTime()-staDate.getTime()>0){
//判断时间是否在午休前
hours=0;
}else if((new Date(startDay+endmoon)).getTime()-staDate.getTime()>0){
days=(new Date(startDay+endmoon)).getTime()-staDate.getTime();
hours=Math.floor(days/(3600*1000));
alert(hours);
min=Math.floor(days/(60*1000));
alert(min);
mn=Math.ceil(Math.abs((min)/60));
alert(mn);
hours=parseFloat(hours)+parseFloat(mn);
//判断时间是否在下午上班前
}else if((new Date(startDay+startnoon)).getTime()-staDate.getTime()>0){
//判断时间是否在下班后
days=(new Date(startDay+startnoon)).getTime()-staDate.getTime();
hours=Math.floor(days/(3600*1000))-1;
alert(hours);
min=Math.floor(days/(60*1000));
alert(min);
mn=Math.ceil(Math.abs((min)/60));
alert(mn);
hours=parseFloat(hours)+parseFloat(mn);
}else{
days=(new Date(startDay+endwork)).getTime()-staDate.getTime();
hours=Math.floor(days/(3600*1000))-1;
alert(hours);
min=Math.floor(days/(60*1000));
alert(min);
mn=Math.ceil(Math.abs((min)/60));
alert(mn);
hours=parseFloat(hours)+parseFloat(mn);
}
alert(hours);
//判断时间开始是否在上班时间
if((new Date(endDay+endwork)).getTime()-endDate.getTime()<0){
days=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=day*8+8-hours;
}else if((new Date(endDay+startnoon)).getTime()-endDate.getTime()<0){
days=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=((new Date(endDay+startnoon)).getTime()-endDate.getTime())/(3600*1000);
hour=day*8+8-Math.floor(hour)-hours;
}else if((new Date(endDay+endmoon)).getTime()-endDate.getTime()<0){
days=(new Date(endDay+endmoon)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=((new Date(endDay+endmoon)).getTime()-endDate.getTime())/(3600*1000);
hour=day*8+8-(Math.floor(hour)+5)-hours;
}else{
days=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=day*8-hours;


alert(hour);





// var dateTim=endDate.getTime()-staDate.getTime();
//var iHours = Math.floor(dateTim/(3600*1000));//将时间转换为小时
$(dialog).find("#hourAmt").val(hour);

解决方案 »

  1.   

    不是很明白,能贴出页面HTML?
      

  2.   

    你最好能给出HTML代码以及相关的JS代码,能让想要帮助你的人直接调试。
    还有,总结一下你的问题,什么样的情况下会出错,给出错误的几个数据样本,便于大家调试。
      

  3.   

    js的代码已经贴出来了就是上边那个前台html就是个开始时间和结束时间还有个总时长
      

  4.   

    样子就是这样的html的代码在这里了<form id="submitForm">
    <div class="form label-80 input-200 w96">
    <table class="formTable">
    <tr>
    <td class="label"><strong>*</strong>申请类型:</td>
    <td class="input">
    <select id="attendanceTypeCd" name="attendanceTypeCd" validate="{required:true}">
    <#list attendanceTypeCds as root>
    <option value="${root.valCd}" title="${root.val}">${root.val}</option>
    </#list>
    </select>
    </td>
    <td class="label"><strong>*</strong>申请时长:</td>
    <td class="input"><input style="width: 80px;" id="hourAmt" name="hourAmt" type="text" readonly="readonly"/>小时</td>
    </tr>
    <tr>
    <td class="label"><strong>*</strong>开始时间:</td>
    <td class="input">
    <input type="text" readonly="readonly" name="attStaDate" id="attStaDate" class="Wdate div_rl_ri l-text" style="width:100%;" 
    onFocus="var attEndDate=$dp.$('attEndDate');WdatePicker({isShowClear:false,readOnly:true,dateFmt:'yyyy-MM-dd HH:mm:ss',maxDate:'#F{$dp.$D(\'attEndDate\')}',onpicked:function(){attEndDate.focus();}})" 
    ltype="date"/>
    </td>
    <td class="label"><strong>*</strong>结束时间:</td>
    <td class="input">
    <input type="text" onchange="javascript:attendTab.pickedFunc('#addAttApplyDialog')" readonly="readonly" name="attEndDate" id="attEndDate" class="Wdate div_rl_ri l-text" style="width:100%;" 
    onFocus="WdatePicker({isShowClear:false,readOnly:true,dateFmt:'yyyy-MM-dd HH:mm:ss',minDate:'#F{$dp.$D(\'attStaDate\')}'})"
    ltype="date"/>
    </td>
    </tr>
    <tr>
    <td class="label"><strong>*</strong>申请说明:</td>
    <td class="input-250" colspan="3"><textarea id="attendanceDesc" name="attendanceDesc" validate="{required:true}" rows="4" cols="8"></textarea></td>
    </tr>
    </table>
    <div style="margin-left: 180px; margin-top: 10px; float: left;">
    <a class="l-button l-button-submit"  href="javascript:iom.submitForm('#addAttApplyDialog','#submitForm')" title="保存"><span>保存</span></a>
    <a class="l-button l-button-reset" href="javascript:iom.hiddenDialog('#addAttApplyDialog');" title="取消"><span>取消</span></a>
    </div>
    </div>
    </form>
      

  5.   

     <!DOCTYPE >
    <HTML>
    <BODY>
    <script src="http://www.my97.net/dp/My97DatePicker/WdatePicker.js"   ></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>开始:<input  id="attStaDate" onchange="f1()" value="2013-09-11 09:29:00"  readonly="true" 
     onclick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:00',isShowClear:false })"  /><br/>
    结束:<input   id="attEndDate" onchange="f1()" value="2013-09-12 19:29:00" readonly="true"
     onclick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:00', isShowClear:false })"  /><br/>
    时间:<input  id="hourAmt" readonly="true"  />/小时<br/>
    <script> 
    var startwork="09:10:00";
    var endmoon="12:00:00";//中午下班时间
    var startnoon="13:00:00";//下午上班时间
    var endwork="18:00:00";//下班时间
    function t2h(t){
    return (new Date('0/1/1 '+t)- new Date('0/1/1'))/36e5
    }
    function f1(){
    var ed=$("#attEndDate").val().replace(/-/g, "/")
    var sd=$("#attStaDate").val().replace(/-/g, "/");
    var st=sd.slice(11),et=ed.slice(11);
    if(!ed||!ed) return;
    var sDate=new Date(sd.slice(0,10)),eDate=new Date(ed.slice(0,10)) ;
      var restTime=t2h(startnoon)-t2h(endmoon);
      var h=0,_h;
      if(st > startwork){
       h=t2h(endwork)-t2h(st);
       if(st< startnoon ){
       _h=t2h(startnoon)-t2h(st) 
       h-= _h>restTime?restTime:_h;
       }
      }
      if(et< endwork){
       h-= t2h(et)-t2h(endwork)  ;
       if(et< startnoon ){
       _h=t2h(startnoon)-t2h(et) 
       h+= _h>restTime?restTime:_h;
       }
      }
      h=Math.round( h+(eDate-sDate)/864E5 *8);
      $("#hourAmt").val(h)
      return h
    }
    f1();
    </script>
    </BODY>
    </HTML>
      

  6.   

    #14处理结束时间不对,改了下<!DOCTYPE >
    <HTML>
    <BODY>
    <script src="http://www.my97.net/dp/My97DatePicker/WdatePicker.js"   ></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
    开始:<input  id="attStaDate" onchange="f1()" value="2013-09-11 12:00:00"  readonly="true" 
     onclick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:00',isShowClear:false })"  /><br/>
    结束:<input   id="attEndDate" onchange="f1()" value="2013-09-11 13:00:00" readonly="true"
     onclick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:00', isShowClear:false,minDate:'#F{$dp.$D(\'attStaDate\')}' })"  /><br/>
    时间:<input  id="hourAmt" readonly="true"  />/小时<br/>
    <script> 
    var startwork="09:10:00";
    var endmoon="12:00:00";//中午下班时间
    var startnoon="13:00:00";//下午上班时间
    var endwork="18:00:00";//下班时间
    function t2h(t){
    return (new Date('0/1/1 '+t)- new Date('0/1/1'))/36e5
    }
    function f1(){
    var sd=$("#attStaDate").val().replace(/-/g, "/");
    var ed=$("#attEndDate").val().replace(/-/g, "/")
    var st=sd.slice(11),et=ed.slice(11);
    if(!ed||!ed) return;
    var sDate=new Date(sd.slice(0,10)),eDate=new Date(ed.slice(0,10)) ;
      var restTime=t2h(startnoon)-t2h(endmoon);
      var h=8,_h,ext;
      if(st > startwork){
       h=t2h(endwork)-t2h(st);
       if(st< startnoon ){
       _h=t2h(startnoon)-t2h(st) 
       h-=_h>restTime?restTime:_h;
       }
      }
      if(et< endwork){
       h-= t2h(endwork)- t2h(et);
       if(et< startnoon ){
       _h=t2h(startnoon)-t2h(et) 
       h+=_h>restTime?restTime:_h;
       }
      }
      h=Math.round( h+(eDate-sDate)/864E5 *8);
      $("#hourAmt").val(h)
      return h
    }
    f1();
    </script>
    </BODY>
    </HTML>
      

  7.   

    回去想了一夜啊 可算是想明白了首先谢谢各位大哥大姐小弟小妹的帮助在大家集思广益的帮助下小弟完成了虽说写的不咋样吧但是还是实现了现在贴出来请大家多多指正看的不对的地方请及时提醒谢谢了!!!
    var startwork=" 09:00:00";
    var endwork=" 18:00:00";
    var endmoon=" 12:00:00";
    var startnoon=" 13:00:00";
    var hour=0;
    var days=0;
    //开始时间 结束时间
    // var staDate =new Date($(dialog).find("#attStaDate").val().replace(/-/g, "/"));
    // var endDate =new Date($(dialog).find("#attEndDate").val().replace(/-/g, "/"));
    var ed=$(dialog).find("#attEndDate").val().replace(/-/g, "/");
    var sd=$(dialog).find("#attStaDate").val().replace(/-/g, "/");
    //开始时间计算
    var startDay=sd.substring(0,sd.length-9);//开始日期
    var min=sd.substring(14,16);//开始时间分钟
    var hour=sd.substring(11,13);//开始时间小时
    if(parseInt(min)>30){
    hour=parseInt(hour)+1;
    }
    var staDate=new Date(startDay+" "+hour+":00:00");
    var timePoor=staDate.getTime()-(new Date(startDay+startwork)).getTime();
    var daystart=0
    if(timePoor>0){
     daystart=timePoor/(3600*1000);
    if(parseInt(daystart)>3&&parseInt(daystart)<8){
    daystart=parseInt(daystart)-1;
    }else if(daystart>=8){
    daystart=parseInt(daystart)-2;
    }else{
    daystart=daystart;
    }
    }else{
    daystart=0;
    }
    //结束时间计算

    var endDay=ed.substring(0,ed.length-9);//结束日期
    var mined=ed.substring(14,16);//开始时间分钟
    var houred=ed.substring(11,13);//开始时间小时
    if(parseInt(mined)>30){
    houred=parseInt(houred)+1;
    }
    var endDate=new Date(endDay+" "+houred+":00:00");
    var timePoorEnd=(new Date(endDay+endwork)).getTime()-endDate.getTime();
    var dayend=0;
    if(timePoorEnd>0){
     dayend=timePoorEnd/(3600*1000);
    if(parseInt(dayend)>3&&parseInt(dayend)<8){
    dayend=parseInt(dayend)-1;
    }else if(dayend>=8){
    dayend=parseInt(dayend)-2;
    }
    }else{
    dayend=0;
    }

    var hour=0;
    var dayPoor=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime()
    hour=dayPoor/(3600*1000*24);
    hour=hour*8+8;
    //alert(hour+"小时");
    hour=parseInt(hour)-parseInt(daystart)-parseInt(dayend);
    // var dateTim=endDate.getTime()-staDate.getTime();
    //var iHours = Math.floor(dateTim/(3600*1000));//将时间转换为小时
    $(dialog).find("#hourAmt").val(hour);