JavaScript 如何计算2个时间差 工作时间为8小时

  /*
   * 計算2個時間的時間差
   */

  上班时间 07:20  16:00 或者 08:00 17:00 中间休息1小时 不包括法定节假日 只考虑星期天
 这里 只放假星期日 星期6要上班的  命苦。。。。。。
function DateDiff()
{ 
   var date1=dateFormat(Ext.getCmp("FromDate").getValue(),'Y-m-d H:i:s');//获取开始时间 这里是用的是ExtJs
   var date2=dateFormat(Ext.getCmp("EndDate").getValue(),'Y-m-d H:i:s');//获取结束时间
   var dTotal="";
   if(date1!="")
   {
      
      var dt1 = new Date(Date.parse(date1.replace(/-/g, '/')));//转换成日期
      var dt2 = new Date(Date.parse(date2.replace(/-/g, '/')));//转换成日期格式

      var m1=dt1.getMonth();//返回表示月份的数字 (0,1,2,3...11)
      var m2=dt2.getMonth();
      var w1=dt1.getDay();
      var w2=dt2.getDay();//返回表示星期的某一天的數字 
      var d1=dt1.getDate();//還回月份的某一天 (1...31)
      var d2=dt2.getDate();
      var st=dt1.getHours();//時間的小時的字段 {0.....23}
      var et=dt2.getHours();
      var min1=dt1.getMinutes();
      var min2=dt2.getMinutes();
      var dCount=0;
      var dMin=0;
      var dHour=0;
      var dWeek=0;
      var dMonth=0;
      var dt=0;
      try
      {  
           if(m2-m1>0)
          {
              for(i=m1;i<m2;i++)//判断头尾月份总共多少天
             {
                 dt+=Check_days(i);
               }
                 
               dCount=dt+d2-d1;
              }
              else
              {
                  dCount=d2-d1;//天數差
              }
        
         if(w2-w1<=0&&dCount>0)// 星期天 並且天數差大於0
         {
            dWeek=1;
         }
         else if(dCount>7)//天數差 7天以上 
         {
            dWeek=parseInt(dCount/7);
         }
         
         dHour=et-st;//小時差
         dMin=min2-min1;
         if(min1=='20')
         {
            if(min2=='20')
            {
               dMin=(dMin)/60;
            }
            else
            {
              dMin=(dMin+20)/60;
            }
         }
         else
         {
            dMin=dMin/60;
         }
         dTotal=(dCount-dWeek)*8+dHour+dMin;

         if(st<12&&et>12)
         {
            dTotal= dTotal-1;//扣除午間休息一小時 
         }

          Ext.getCmp("iTotal").setValue(dTotal);
        
       }
       catch (e)
       {
         return e.message;
       }
   }
}


  // 核算某月有几天   0:1月 1:2月 2:3月。。。 这里不考虑2月有29天 也就是闰月的情况 不然太复杂
  function Check_days(v)
  {
       var days=0;
       switch(v)
       {
           case 0 :case 2 : case 4: case 6: case 7: case 9:case 11:
               days=31;
           break;
           case 1:
               days=28;
               break;
           case 3:case 5: case 8: case 10:
               days=30;
           break;
       }
       return days;
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值