function time(startDate, endDate) {
// 校验参数
if (!startDate || !endDate) {
return “”
}
var startYearMonthDayStr = startDate.split(" “)[0];
var endYearMonthDayStr = endDate.split(” ")[0];
// 解析字符串
var startYear = startDate.match(/(\d{4})-\d{2}-\d{2}/)[1];
var startMonth = startDate.match(/\d{4}-(\d{2})-\d{2}/)[1];
var startDay = startDate.match(/\d{4}-\d{2}-(\d{2})/)[1];
var startHour = startDate.match(/(\d{1,2}):\d{1,2}/)[1];
var startMinutes = startDate.match(/\d{1,2}😦\d{1,2})/)[1];
var startTime = new Date();
startTime.setFullYear(startYear);
startTime.setMonth(startMonth - 1);
startTime.setDate(startDay);
startTime.setHours(startHour);
startTime.setMinutes(startMinutes);
startTime.setSeconds(0);
startTime.setMilliseconds(0);
var endYear = endDate.match(/(\d{4})-\d{2}-\d{2}/)[1];
var endMonth = endDate.match(/\d{4}-(\d{2})-\d{2}/)[1];
var endDay = endDate.match(/\d{4}-\d{2}-(\d{2})/)[1];
var endHour = endDate.match(/(\d{1,2}):\d{1,2}/)[1];
var endMinutes = endDate.match(/\d{1,2}😦\d{1,2})/)[1];
var endTime = new Date();
endTime.setFullYear(endYear);
endTime.setMonth(endMonth - 1);
endTime.setDate(endDay);
endTime.setHours(endHour);
endTime.setMinutes(endMinutes);
endTime.setSeconds(0);
endTime.setMilliseconds(0);
// 12点到5点半的毫秒数
var from1200To530 = 5 * 60 * 60 * 1000 + 30 * 60 * 1000;
// 8点半到12点的毫秒数
var from830To12 = 30 * 60 * 1000 + 3 * 60 * 60 * 1000;
// 开始判断
// 判断开始时间,请假时长
// 开始时间的8点半时间对象
var startTime830 = new Date(startTime.valueOf())
startTime830.setHours(8);
startTime830.setMinutes(30);
// 开始时间的12点时间对象
var startTime12 = new Date(startTime.valueOf())
startTime12.setHours(12);
startTime12.setMinutes(0);
// 开始时间的下午5点半时间对象
var startTime530 = new Date(startTime.valueOf())
startTime530.setHours(17);
startTime530.setMinutes(30);
// 结束时间的8点半时间对象
var endTime830 = new Date(endTime.valueOf())
endTime830.setHours(8);
endTime830.setMinutes(30);
// 结束时间的12点时间对象
var endTime12 = new Date(endTime.valueOf())
endTime12.setHours(12);
endTime12.setMinutes(0);
// 结束时间的下午5点半时间对象
var endTime530 = new Date(endTime.valueOf())
endTime530.setHours(17);
endTime530.setMinutes(30);
// 开始时间的23:59:59
var startTime235959 = new Date(startTime.valueOf());
startTime235959.setHours(23);
startTime235959.setMinutes(59);
startTime235959.setMinutes(59);
// 结束时间的23:59:59
var endTime235959 = new Date(endTime.valueOf());
endTime235959.setHours(23);
endTime235959.setMinutes(59);
endTime235959.setMinutes(59);
var distanceDayNum = (endTime235959 - startTime235959) / 1000 / 60 / 60 / 24 - 1
var startDayNum = 0;
// 判断同一天的情况
if (startYearMonthDayStr == endYearMonthDayStr) {
// 0.5天的情况
// 结束时间小于中午12点大于8:30
if (endTime.getTime() <= startTime12.getTime() && endTime.getTime() > startTime830.getTime()) {
return 0.5
}
// 开始时间大于中午12点小于17:30
if (startTime.getTime() > startTime12.getTime() && startTime.getTime() <= startTime530.getTime()) {
return 0.5
}
// 一天的情况
// 早8:30-下午5:30
if (startTime.getTime() <= startTime830.getTime() && endTime.getTime() >= startTime530.getTime()) {
return 1
}
// 早上 8:30-12:00 中的某一个时刻 到 下午 12:00-17:30 中的某一个时刻
if (startTime.getTime() < startTime12.getTime() && endTime.getTime() > startTime12.getTime()) {
return 1
}
}
// 跨天的情况
if (startYearMonthDayStr != endYearMonthDayStr) {
// 开始为半天的情况,结束为半天的情况
if (startTime.getTime() >= startTime12.getTime() && endTime.getTime() <= endTime12.getTime()) {
return 0.5 + 0.5 + distanceDayNum;
}
// 开始为半天,结束为一天的情况
if (startTime.getTime() >= startTime12.getTime() && endTime.getTime() > endTime12.getTime()) {
return 0.5 + 1 + distanceDayNum;
}
// 开始为一天,结束为半天的情况
if (startTime.getTime() < startTime12.getTime() && endTime.getTime() <= endTime12.getTime()) {
return 1 + 0.5 + distanceDayNum;
}
// 开始为一天,结束为一天的情况
if (startTime.getTime() < startTime12.getTime() && endTime.getTime() > endTime12.getTime()) {
return 1 + 1 + distanceDayNum;
}
}
return ""
}
console.log(time("2021-07-12 12:30", "2021-07-14 13:30"))