微信小程序计算请假时长(天)

微信小程序计算请假时长(天)

需求

根据开始时间和结束时间计算请假时长(按天计算,不包括周六周日)

实现

    /**
     * 计算小时
     * bDate 开始时间
     * eDate 结束时间
     */
    countHours(start_time_date, start_time_timer, end_time_date, end_time_timer) {
        let bDateDayY = new Date(start_time_date)//开始时间
        let bDateDayT = start_time_timer; // 上午、下午
        let eDateDayY = new Date(end_time_date)//结束时间
        let eDateDayT = end_time_timer;
        let bisweek = bDateDayY.getDay(); //获取开始时间是周几
        let eisweek = eDateDayY.getDay(); //获取结束时间是周几
        if ((bisweek != 0 && bisweek != 6) && (eisweek != 0 && eisweek != 6)) { //开始时间和结束时间都不是周末
            var mosconds = eDateDayY.getTime() - bDateDayY.getTime()  //时间 差的 毫秒数
            let days = (eDateDayY - bDateDayY) / 1000 / 3600 / 24; //计算出相差天数
            let weeks = this.checkWeekend(bDateDayY, eDateDayY, days); //周末天数
            if (weeks > 0) { //有周末
                days = days - weeks; //去掉周末天数
                if ((bDateDayT == '下午' && eDateDayT == '上午')) { //开始时间是下午,结束时间是上午
                    days = days - 0.5; //去掉半天
                }
                if ((bDateDayT == '下午' && eDateDayT == '下午')) { //开始时间是下午,结束时间是下午
                    days = days; //不用去掉半天
                }
                if ((bDateDayT == '上午' && eDateDayT == '下午')) { //开始时间是上午,结束时间是下午
                    days = days + 1; //加一天
                }
                if ((bDateDayT == '上午' && eDateDayT == '上午')) { //开始时间是上午,结束时间是上午
                    days = days + 0.5; //加半天
                }
                return days; //返回天数
            } else { //没有周末
                if (mosconds == 0) { //同天
                    if ((bDateDayT == '上午' && eDateDayT == '下午')) { //开始时间是上午,结束时间是下午
                        days = days + 1; //加一天
                    }
                    if (eDateDayT == '上午') { //结束时间是上午
                        days = days + 0.5; //加半天
                    }
                    return days;
                } else {
                    if ((bDateDayT == '上午' && eDateDayT == '下午')) {
                        days = days + 1;
                    }
                    if ((bDateDayT == '上午' && eDateDayT == '上午')) {
                        days = days + 0.5;
                    }
                    if ((bDateDayT == '下午' && eDateDayT == '上午')) {
                        days = days + 0.5;
                    }
                    if ((bDateDayT == '下午' && eDateDayT == '下午')) {
                        days = days + 0.5;
                    }
                    return days;
                }
            }
        } else if ((bisweek == 0 || bisweek == 6) || (eisweek == 0 || eisweek == 6)) { //开始时间或结束时间是周末
            if ((bisweek == 6 && eisweek == 0) || (bisweek == 6 && eisweek == 6) || (bisweek == 0 && eisweek == 0)) { //开始时间是周六或周日,结束时间是周日或周六
                // wx.showModal({
                //     title: '提示',
                //     content: '这段时间休息不需要请假!',
                // })
                let days = 0;
                return days;
            } else { //开始时间是周末,结束时间是工作日
                if (bisweek == 0 || bisweek == 6) {
                    var mosconds = eDateDayY.getTime() - bDateDayY.getTime()  //时间 差的 毫秒数
                    let days = (eDateDayY - bDateDayY) / 1000 / 3600 / 24; //计算出相差天数
                    let weeks = this.checkWeekend(bDateDayY, eDateDayY, days); //周末天数
                    if (weeks > 0) {
                        if (days >= weeks) {
                            days = days - weeks;
                            if ((bDateDayT == '下午' && eDateDayT == '上午')) {
                                days = days - 0.5;
                            }
                            if ((bDateDayT == '下午' && eDateDayT == '下午')) {
                                days = days;
                            }
                            if ((bDateDayT == '上午' && eDateDayT == '下午')) {
                                days = days + 1;
                            }
                            if ((bDateDayT == '上午' && eDateDayT == '上午')) {
                                days = days + 0.5;
                            }
                        } else {
                            days = 0
                        }
                        return days;
                    } else { //没有周末
                        if (mosconds == 0) { //同天
                            if ((bDateDayT == '上午' && eDateDayT == '下午')) {
                                days = days + 1;
                            }
                            if (eDateDayT == '上午') {
                                days = days + 0.5;
                            }
                            return days;
                        } else {
                            if ((bDateDayT == '上午' && eDateDayT == '下午')) {
                                days = days + 1;
                            }
                            if ((bDateDayT == '上午' && eDateDayT == '上午')) {
                                days = days + 0.5;
                            }
                            if ((bDateDayT == '下午' && eDateDayT == '上午')) {
                                days = days + 0.5;
                            }
                            if ((bDateDayT == '下午' && eDateDayT == '下午')) {
                                days = days + 0.5;
                            }
                            return days;
                        }
                    }
                    // wx.showModal({
                    //     title: '提示',
                    //     content: '开始日期不可为周末',
                    // })
                }
                if (eisweek == 0 || eisweek == 6) {
                    var mosconds = eDateDayY.getTime() - bDateDayY.getTime()  //时间 差的 毫秒数
                    let days = (eDateDayY - bDateDayY) / 1000 / 3600 / 24; //计算出相差天数
                    let weeks = this.checkWeekend(bDateDayY, eDateDayY, days); //周末天数
                    if (weeks > 0) {
                        if (days >= weeks) {
                            days = days - weeks;
                            if ((bDateDayT == '下午' && eDateDayT == '上午')) {
                                days = days + 0.5;
                            }
                            if ((bDateDayT == '下午' && eDateDayT == '下午')) {
                                days = days + 0.5;
                            }
                            if ((bDateDayT == '上午' && eDateDayT == '下午')) {
                                days = days;
                            }
                            if ((bDateDayT == '上午' && eDateDayT == '上午')) {
                                days = days;
                            }
                        } else {
                            days = 0
                        }
                        return days;
                    } else {
                        if (mosconds == 0) { //同天
                            if ((bDateDayT == '上午' && eDateDayT == '下午')) {
                                days = days + 1;
                            }
                            if ((bDateDayT == '下午' && eDateDayT == '下午')) {
                                days = days + 0.5;
                            }
                            if ((bDateDayT == '上午' && eDateDayT == '上午')) {
                                days = days + 0.5;
                            }
                            return days;
                        } else {
                            if ((bDateDayT == '上午' && eDateDayT == '下午')) {
                                days = days + 1;
                            }
                            if ((bDateDayT == '上午' && eDateDayT == '上午')) {
                                days = days + 0.5;
                            }
                            if ((bDateDayT == '下午' && eDateDayT == '上午')) {
                                days = days + 0.5;
                            }
                            if ((bDateDayT == '下午' && eDateDayT == '下午')) {
                                days = days + 0.5;
                            }
                            return days;
                        }
                    }
                    // wx.showModal({
                    //     title: '提示',
                    //     content: '结束日期不可为周末',
                    // })
                }
            }
        }

    }
    checkWeekend(beginDay, endDay, days) {
        var weekEndCount = 0;
        if (days < 1) {
            //判断开始时间是否是周末
            if (beginDay.getDay() == 6 || beginDay.getDay() == 0) {
                weekEndCount += 1;
            }

        } else if (days < 7) {
            if (beginDay.getDay() < endDay.getDay() && endDay.getDay() == 6) {
                weekEndCount += 1;
            }
            else if (beginDay.getDay() < endDay.getDay() && beginDay.getDay() == 0) {
                weekEndCount += 1;
            } else if (beginDay.getDay() > endDay.getDay()) {
                weekEndCount += 2;
            }

        }
        else if (days >= 7) {
            if (days % 7 > 1) {
                //以周六为界限,判断开始时间和周六的差值与总天数除以7的余数的关系判断是否需要增加额外的周末
                if (6 - beginDay.getDay() == days % 7) {
                    weekEndCount += parseInt(days / 7) * 2;
                } else if (6 - beginDay.getDay() + 1 == days % 7) {
                    weekEndCount += parseInt(days / 7) * 2;
                    weekEndCount += 1;
                } else {
                    weekEndCount += parseInt(days / 7) * 2;
                    weekEndCount += 2;
                }

            } else {
                weekEndCount += parseInt(days / 7) * 2;
            }
        }
        return weekEndCount;
    },
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值