js计算请假天数

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"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值