zoukankan      html  css  js  c++  java
  • 前端计算工时——早9晚5,,剔除周六周天

      最近在项目中,遇到了一个需求,就是需要计算实际的工时,就是我们实际工作过程中早上9点到晚上17点,每周五天工作制的工时。

      代码如下所示:

     1 //针对FT流程,计算剔除周末的每天8小时工作制的时间
     2 function carryTime(date){  
     3     if(date.getMinutes()>0&&date.getMinutes()<15){
     4         date.setMinutes(0);  
     5     }  
     6     if(date.getMinutes()>=15&&date.getMinutes()<30){
     7         date.setMinutes(30);  
     8     }  
     9     if(date.getMinutes()>30&&date.getMinutes()<45){
    10         date.setMinutes(30);  
    11     }  
    12     if(date.getMinutes()>=45){
    13         date.setHours(date.getHours()+1);  
    14         date.setMinutes(0);  
    15     }  
    16     return date;  
    17 }  
    18 function DateDiffNoWeekDay(startTimeTemp,endTimeTemp){
    19     var reg = new RegExp(",","g");
    20     var startTime = new Date(startTimeTemp.replace(reg,"/"));
    21     var endTime = new Date(endTimeTemp.replace(reg,"/"));
    22     if(startTime>=endTime) return 0;  
    23     startTime=carryTime(startTime);  
    24     endTime=carryTime(endTime);  
    25     var totalTime=0;  
    26     if(startTime.getDay()==6||startTime.getDay()==0){  
    27         totalTime=endTime.getDate()-startTime.getDate();  
    28     }else{  
    29         totalTime=Math.floor(((endTime-startTime)/(3600*1000))/24);//计算小时 
    30     }  
    31     var tempStartTime=new Date();  
    32     tempStartTime.setTime(startTime.getTime());//暂存开始时间
    33     while(tempStartTime.getDate()<endTime.getDate()){  
    34         if(tempStartTime.getDay()==6||tempStartTime.getDay()==0){  
    35             totalTime--;  
    36         }  
    37         tempStartTime.setDate(tempStartTime.getDate()+1);  
    38    }
    39    var temp=0;
    40    do{  
    41         if(startTime.getDay()==6 || startTime.getDay()==0){  
    42             startTime.setDate(startTime.getDate()+1);  
    43             startTime.setHours(9);  
    44             startTime.setMinutes(0);  
    45             continue;  
    46         }  
    47         if(startTime.getHours()*60+startTime.getMinutes()>=9*60 && startTime.getHours()*60+startTime.getMinutes()<17*60){  
    48             temp+=0.05;  
    49         }
    50         startTime.setTime(startTime.getTime()+0.5*3600*1000);  
    51     }while(startTime.getHours()*60+startTime.getMinutes()!=endTime.getHours()*60+endTime.getMinutes()) //开始时间分钟数等于结束时间分钟数,跳出循环体
    52     totalTime+=Math.floor(temp/0.8);  
    53     totalTime+=temp%0.8;  
    54     totalTime=Math.round(totalTime*100)/100;
    55     if((startTime.getDay()!=6 && startTime.getDay()!=0) && 
    56             (startTimeTemp.split(" ")[1] == endTimeTemp.split(" ")[1]) && totalTime >= 0){
    57         //处理"2021-07-12 11:00:00","2021-07-13 11:00:00"小时分钟秒一样的情况,
    58         //这个情况下,会导致天数多1的情况
    59         totalTime--;
    60     }
    61     var days=Math.floor(totalTime);  
    62     var hours=Math.round((totalTime-days)*100)/10;
    63     if(endTime.getDay()==6||endTime.getDay()==0){
    64         days--;
    65     }
    66     //document.write(" <u>  "+days+"  </u>day<u>   "+hours+"  </u>hour");//返回HTML格式的时间
    67     console.log("DateDiffNoWeekDay result:"+days+" day "+hours+" hour");
    68     return days*8+hours;
    69 }  

      调用方法:

    DateDiffNoWeekDay("2021-07-12 14:00:00","2021-07-13 15:00:00");

      执行结果:

         

  • 相关阅读:
    Android开发之动态设置字体的样式和粗细
    Android开发之炫酷MD风格
    Android开发之自定义Dialog简单实现
    Android开发之自定义Toast(带详细注释)
    【Android优化篇】提升Activity加载速度的方法
    android使用Pull解析来自服务器的xml文件时出现错误以及解决方案
    Image augmentation for machine learning experiments
    LibreCAD
    C++ library to read and write DXF/DWG files
    DXF-Viewer
  • 原文地址:https://www.cnblogs.com/lujun1949/p/15009519.html
Copyright © 2011-2022 走看看