import dayjs from "dayjs";
/**
* 返回小时计算(适用于计算小时)
* 计算请假时长
* startTime 开始时间
* endTime 结束时间
* workSatrt 上班时间
* workEnd 下班时间
* isFree 是否要去除午休工作时长
* freeStart 午休开始时间
* freeEnd 午休结束时间
* isHours 返回小时/天
*/
function getTimeLong(
startTime,
endTime,
workSatrt,
workEnd,
isFree,
freeStart,
freeEnd,
isHours
) {
let duration = 0; //总时长(小时)
let startTimeDay = startTime.split(" ")[0]; //获取开始时间的年月日
let endTimeDay = endTime.split(" ")[0]; //获取结束时间的年月日
let startTimeHour = startTime.split(" ")[1].split(":")[0] * 1; //获取开始时间的小时数
let endTiemHour = endTime.split(" ")[1].split(":")[0] * 1; //获取结束时间的小时数
if (startTimeHour <= workSatrt) {
startTimeHour = workSatrt;
} else if (startTimeHour >= workEnd) {
startTimeHour = workEnd;
}
if (endTiemHour >= workEnd) {
endTiemHour = workEnd;
} else if (endTiemHour <= workSatrt) {
endTiemHour = workSatrt;
}
//如果相等则为同一天
if (dayjs(startTimeDay).unix() == dayjs(endTimeDay).unix()) {
// 是否去除休息日
if (isFree) {
if (startTimeHour <= freeStart) {
if (endTiemHour <= freeStart) {
duration = endTiemHour - startTimeHour;
} else if (endTiemHour > freeStart && endTiemHour < freeEnd) {
duration = freeStart - startTimeHour;
} else if (endTiemHour >= freeEnd) {
duration = freeStart - startTimeHour + endTiemHour - freeEnd ;
}
} else if (startTimeHour > freeStart && startTimeHour < freeEnd) {
duration = endTiemHour - freeEnd ;
} else if (startTimeHour >= freeEnd) {
duration = endTiemHour - startTimeHour;
}
} else {
duration = endTiemHour - startTimeHour;
}
} else if (dayjs(startTimeDay).unix() < dayjs(endTimeDay).unix()) {
// 两个日期间有几天
let daylongs =
(dayjs(endTimeDay).unix() - dayjs(startTimeDay).unix()) / (24 * 60 * 60);
let startTimeWeek = dayjs(startTimeDay).day(); //开始周几
let daysBetween = 0; //剔除周末有几天 两个日期间有多少天
for (let i = startTimeWeek + 1; i < startTimeWeek + daylongs; i++) {
if (i % 7 != 0 && i % 7 != 6) {
daysBetween += 1;
}
}
let firstDayTimeLong = 0; //开始时间当天的小时数
let endDayTimeLong = 0; //结束当天的小时数
if (isFree) {
if (startTimeHour <= freeStart) {
firstDayTimeLong = freeStart - startTimeHour + workEnd - freeEnd;
} else if (startTimeHour > freeStart && startTimeHour < freeEnd) {
firstDayTimeLong = workEnd - freeEnd;
} else if (startTimeHour >= freeEnd) {
firstDayTimeLong = workEnd - startTimeHour;
}
if (endTiemHour <= freeStart) {
endDayTimeLong = endTiemHour - workSatrt;
} else if (endTiemHour > freeStart && endTiemHour < freeEnd) {
endDayTimeLong = freeStart - workSatrt;
} else if (endTiemHour >= freeEnd) {
endDayTimeLong = freeStart - workSatrt + endTiemHour - freeEnd;
}
duration = daysBetween * 8 + firstDayTimeLong + endDayTimeLong;
} else {
firstDayTimeLong = workEnd - startTimeHour;
endDayTimeLong = endTiemHour - workSatrt;
duration = daysBetween * 8 + firstDayTimeLong + endDayTimeLong;
}
}
if (isHours) {
return duration;
} else {
return duration / 8;
}
}
export default getTimeLong;
关于计算请假时长问题
最新推荐文章于 2024-12-26 15:45:18 发布