网上查了好几个计算请假天数的方法,发现写的比较复杂还几乎不能用,没办法就自己撸了一个,亲测可用
import moment from "moment";
ConvertDays(beginDay, endDay) {
// 制度时间上班、下班、午休时间节点
let begin = 9, end = 17.5, afterBeg = 12, afterEnd = 13.5, total = 7, diff = 1.5;
let days = parseInt((moment(endDay.format("YYYY-MM-DD 00:00:00")) - moment(beginDay.format("YYYY-MM-DD 00:00:00"))) / 60 / 60 / 1000 / 24);
let beginHour = beginDay.get("hour");
let beginMin = beginDay.get("minute");
let beginTime = Number((beginHour + (beginMin / 60)).toFixed(2));
//开始时间不在上班时间时, 置位上班临界时间
if(beginTime <= begin) beginTime = begin;
if(beginTime > afterBeg && beginTime < afterEnd) beginTime = afterEnd;
if(beginTime >= end) beginTime = end
let endHour = endDay.get("hour");
let endMin = endDay.get("minute");
let endTime = Number((endHour + (endMin / 60)).toFixed(2));
//结束时间不在上班时间时, 置位上班临界时间
if(endTime <= begin) endTime = begin;
if(endTime > afterBeg && endTime < afterEnd) endTime = afterEnd;
if(endTime >= end) endTime = end
if(endTime >= beginTime) {
if(beginTime >= afterEnd) {
days = (days + ((endTime - beginTime) / total)).toFixed(2);
} else {
if(endTime >= afterEnd) {
days = (days + ((endTime - beginTime - diff) / total)).toFixed(2);
} else {
days = (days + ((endTime - beginTime) / total)).toFixed(2);
}
}
} else {
if(endTime >= afterEnd) {
days = (days - 1 + ((endTime - beginTime) / total)).toFixed(2);
} else {
if(beginTime >= afterEnd) {
days = (days - 1 + ((endTime - begin + end - beginTime) / total)).toFixed(2);
} else {
days = (days - 1 + ((endTime - begin + end - diff - beginTime) / total)).toFixed(2);
}
}
}
return days
}
ConvertDays(moment("2020-06-01 9:00"), moment("2020-06-04 17:30"))// 输出:4.00