SOURCE

        
function zhouji(starts, end){
    var start = moment(starts)
    var end = moment(end)
    var sign,sign1
    var stats = moment(starts).hour('20').minute('00')
    var end_ = moment(starts).add(1, 'd').hour('08').minute('00')
    // console.log(end_)
    // 判断开始时间是否在20点之后的时间段,判断开始时间是20之前(或等于)并且结束时间是20之后
    if(start.isBetween(stats, end_, null, '[]') || start.isSameOrBefore(stats) && end.isSameOrAfter(stats)){

        sign = 1
        if(start.isAfter(stats)){
            sign1 = 1
        }else{
            sign1 = 0
        }
    }else{
        sign = 0
    }

    // 时间是否超过24小时
    if(moment(end).diff(moment(start), 'mintes')/(3600*1000) <= 24){
        // 开始时间是否是周末
        if(start.format('d') == '0' || start.format('d') == '6'){
            // 结束时间是周末
            if(end.format('d') == '0' || end.format('d') == '6'){
                var number = Math.round(end.diff(start, 'mintes')/(3600*1000))
                return [number, 1, 2, start.format('d')]
      
            //结束时间不是周末
            }else{
                var number = Math.round(end.startOf('day').diff(start, 'mintes')/(3600*1000))
                return [number, 1, 2, start.format('d')]
            }
        // 开始时间不是周末
        }else{
            // 结束是周末
            if(end.format('d') == '0' || end.format('d') == '6'){
                var number = Math.round(end.diff(start, 'mintes')/(3600*1000))
                var ends = end.format('d')
                //结束时间不是整点0
                if(end.format('H') != '0' || (end.format('H') == '0' && end.format('m') != '0')){
                    number = Math.round(end.diff(start.add(1, 'day').startOf('day'), 'mintes')/(3600*1000))
                    return [number, 1, 2, ends]
                 
                }
                return [number, 1, 2, ends]
                
            // 结束不是周末
            }else{
                var number = Math.round(end.diff(start, 'mintes')/(3600*1000))
                if(sign){
                    if(!sign1){
                        if(end.isSameOrAfter(end_)){
                            number = Math.round(end_.diff(stats, 'mintes')/(3600*1000))
                        }else{
                            number = Math.round(end.diff(stats, 'mintes')/(3600*1000))
                        }
                    }else{
                        console.log(end.format('H'))
                        if(end.format('H') >= 8){
                            // var ends = moment(end).hour('06').minute('00')
                            number = Math.round(end_.diff(start, 'mintes')/(3600*1000))
                        }
                    }

                    if(start.format('D') == end.format("D")){
                        return [number, sign, 1]
                        
                    }else if(start.format('D') < end.format("D")){
                        return [number, sign, 1]                       
                    }

                }else{
                    return [number, sign, 1]
                }
            }
        }
    }else{

        alert('时间最长不可超过24小时')
        return false
    }

}


console.log(zhouji('2021-05-17 13:00','2021-05-17 23:00'))
console 命令行工具 X clear

                    
>
console