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); // 输出工时总数