计算工时,设置工作时间

182 阅读1分钟

function calculateWorkingHours(startTime, endTime) { const start = new Date(startTime); // 将开始时间转换为日期对象 const end = new Date(endTime); // 将结束时间转换为日期对象

    // 设置工作时间范围
    var workStartTimeMorning = new Date(start);
    workStartTimeMorning.setHours(8, 30, 0, 0); // 设置早上工作开始时间
    var workEndTimeMorning = new Date(start);
    workEndTimeMorning.setHours(12, 0, 0, 0); // 设置早上工作结束时间
    var workStartTimeAfternoon = new Date(start);
    workStartTimeAfternoon.setHours(13, 30, 0, 0); // 设置下午工作开始时间
    var workEndTimeAfternoon = new Date(start);
    workEndTimeAfternoon.setHours(17, 30, 0, 0); // 设置下午工作结束时间

    let workingHours = 0; // 初始化工时

    var nowDayNum = start.getDay()


    while (start < end) {
        //跨天了重新赋值工作时间
        if (nowDayNum != start.getDay()) {
            var workStartTimeMorning = new Date(start);
            workStartTimeMorning.setHours(8, 30, 0, 0); // 设置早上工作开始时间
            var workEndTimeMorning = new Date(start);
            workEndTimeMorning.setHours(12, 0, 0, 0); // 设置早上工作结束时间
            var workStartTimeAfternoon = new Date(start);
            workStartTimeAfternoon.setHours(13, 30, 0, 0); // 设置下午工作开始时间
            var workEndTimeAfternoon = new Date(start);
            workEndTimeAfternoon.setHours(17, 30, 0, 0); // 设置下午工作结束时间
         
        }
        // console.log(start);
        // console.log(workingHours);
        // 循环直到开始时间等于结束时间
        // 判断是否为工作日并且在工作时间范围内,是的话增加工时
        if (start.getDay() !== 0 && start.getDay() !== 6) {
            if ((start >= workStartTimeMorning && start < workEndTimeMorning) || (start >= workStartTimeAfternoon && start < workEndTimeAfternoon)) {
                workingHours += 0.5; // 如果是工作时间范围内,则增加0.5小时工时
            }
        }
        start.setTime(start.getTime() + 30 * 60 * 1000); // 增加30分钟
    }

    return workingHours; // 返回工时总数
}

const startTime = "2024-04-15 08:30:00"; // 开始时间
const endTime = "2024-04-18 16:30:00"; // 结束时间

const totalWorkingHours = calculateWorkingHours(startTime, endTime); // 计算工时
console.log(totalWorkingHours); // 输出工时总数