纵有疾风起
人生不言弃

js获取一段时间内的工时,除去周末,午休时间

老规矩,先看效果图

js获取一段时间内的工时,除去周末,午休时间插图

比如我们上午9点到12点半,下午2点到6点半算工时。那么我们早晨9点商标,下午6点半下班,就应该算一个完整的工作日,8个工时。再如下图,就应该是15个工时,1天7小时。

js获取一段时间内的工时,除去周末,午休时间插图(1)

还可以跨月计算

js获取一段时间内的工时,除去周末,午休时间插图(2)

下面就把完整的js代码贴出来给大家

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>计算时长</title></head><body><script>    /*    * 0-15分不算工时    * 15-45算半个小时    * 45-60算一个小时    * */    function carryTime(date) {        if (date.getMinutes() > 0 && date.getMinutes() < 15) {            date.setMinutes(0);        }        if (date.getMinutes() >= 15 && date.getMinutes() < 30) {            date.setMinutes(30);        }        if (date.getMinutes() > 30 && date.getMinutes() < 45) {            date.setMinutes(30);        }        if (date.getMinutes() >= 45) {            date.setHours(date.getHours() + 1);            date.setMinutes(0);        }        return date;    }    let number = DateDiffNoWeekDay(new Date("2020-02-25 09:00"), new Date("2020-03-26 17:30"));    console.log("总小时数", number);    function DateDiffNoWeekDay(startTime, endTime) {        if (startTime >= endTime) return 0;        //1,分钟取整        startTime = carryTime(startTime);        endTime = carryTime(endTime);        //2,计算总天数        var totalTime = 0;//工时,天数        if (startTime.getDay() == 6 || startTime.getDay() == 0) {            totalTime = endTime.getDate() - startTime.getDate();        } else {            totalTime = Math.floor(((endTime - startTime) / (3600 * 1000)) / 24);        }        //3,拿初始值赋值给一个临时变量        var tempStartTime = new Date();        tempStartTime.setTime(startTime.getTime());        //4,计算出总天数        while (tempStartTime.getDate() < endTime.getDate()) {            if (tempStartTime.getDay() == 6 || tempStartTime.getDay() == 0) {//周六或者周日减去                totalTime--;            }            tempStartTime.setDate(tempStartTime.getDate() + 1);        }        //5,计算出总小时数        var temp = 0;//工时,小时        do {            if (startTime.getDay() == 6 || startTime.getDay() == 0) {//周六周日                startTime.setDate(startTime.getDate() + 1);                //*********周六周日直接跳过,初始化为早晨9点                startTime.setHours(9);                startTime.setMinutes(0);                continue;            }            let tempMinutes = startTime.getHours() * 60 + startTime.getMinutes();            //上午9点到12点半,算工时            if (tempMinutes >= 9 * 60 && tempMinutes < (12 * 60 + 30)) {                temp += 0.05;            }            //上午14点到18点半,算工时            if (tempMinutes >= 14 * 60 && tempMinutes < (18 * 60 + 30)) {                temp += 0.05;            }            startTime.setTime(startTime.getTime() + 0.5 * 3600 * 1000);//每次增加半个小时        } while (startTime.getHours() * 60 + startTime.getMinutes() != endTime.getHours() * 60 + endTime.getMinutes())        {            totalTime += Math.floor(temp / 0.8);            totalTime += temp % 0.8;            totalTime = Math.round(totalTime * 100) / 100        }        var days = Math.floor(totalTime);        var hours = Math.round((totalTime - days) * 100) / 10;        console.log(days + '天', hours + '小时');        return days * 8 + hours;    }</script></body></html>

代码里注释很详细了,这里就不在做讲解了,后面我会更新更多js相关的实用知识出来,敬请关注。

文章转载于:https://www.jianshu.com/p/2850d79e4af7

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » js获取一段时间内的工时,除去周末,午休时间

分享到: 生成海报
avatar

评论 抢沙发

评论前必须登录!

立即登录   注册

切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活