时间区间伪代码片段

方案一:循环落入区间法

var a =[9,12:30,-,13:30,18];//时间区间,上午时间为 9-12:30下午时间为13:30-18:00,不需要用横线分割
var len=0;

var s,e;//分别为开始结束时间
for(var i=0,len=a.length;i<len;i++){
    if(a[i]=='-' || a[i+1]=='-'){//要空出的时间直接不计算
        continue;
    }
    if(e<a[i] || s>a[i+1] ){//位于区间外不计算时间
        continue;
    }else if(s<a[i] && e<a[i+1]){//位于开始时间之后
        len+=e-a[i];
    }else if (s<a[i] && e>a[i+1]){
        len+=a[i+1]-a[i];
    }else if (s>a[i] && e<a[i+1]){
        len+=e-s;
    }else if (s>a[i] && e>a[i+1]){
        len+=a[i+1]-s;
    }
}

 

方案二:去除边界计算(局限去除一个时间段)

var a =[9,12:30,13:30,18]
var s,e
//分别设置好边界
if(s<a[0]){
    s=a[0];
}
if(e>a[3]){
    e=a[3];
}
    if(e<a[2] || s>a[3] ){//位于2端时,则各自相减
        len=e-s;
    }else if(s<a[2] && e<a[3]){//包含开始时
        len+=a[2]-s;
    }else if (s>a[2] && e>a[3]){//包含结束时
        len+=e-a[3];
    }else if (s<a[2] && e>a[3]){//包含结束时
        len+=(a[2]-s)+(e-a[3]);
    }

 

方案二实现:


function timeAreaDeal(startTime,endTime){
    var len=0;
    var workArr=['09:00','12:30','13:30','18:00'];
    var workTimeArr=[];
    for(var i=0,len=workArr.length;i<len;i++){//设置当天的时间字符串
        workTimeArr.push(getNowFormatDate(workArr[i]));
    }
    if(sizeComparFun(startTime,workTimeArr[0])){
        startTime=workTimeArr[0];
    }
    if(sizeComparFun(workTimeArr[3],endTime)){
        endTime=workTimeArr[3];
    }
    if(sizeComparFun(endTime,workTimeArr[1]) || sizeComparFun(workTimeArr[2],startTime) ){
        len=timeCol(startTime,endTime);
    }else if(sizeComparFun(endTime,workTimeArr[2]) && sizeComparFun(startTime,workTimeArr[1]) ){
        len=timeCol(startTime,workTimeArr[1]);
    }else if(sizeComparFun(workTimeArr[1],startTime) && sizeComparFun(workTimeArr[2],endTime) ){
        len=timeCol(workTimeArr[2],endTime);
    }else if(sizeComparFun(startTime,workTimeArr[1]) && sizeComparFun(workTimeArr[2],endTime) ){
        len=timeCol(startTime,workTimeArr[1])+timeCol(workTimeArr[2],endTime);
    }
    return len;
}

function timeCol(startDate,endDate){
    var longtime=(new Date(Date.parse(endDate.replace(/-/g,  "/")+":00"))-new Date(Date.parse(startDate.replace(/-/g,  "/")+":00")))/3600000;
    return longtime;
}
function sizeComparFun(t1,t2){
    var bool=new Date(Date.parse(t2.replace(/-/g,  "/")+":00"))>=new Date(Date.parse(t1.replace(/-/g,  "/")+":00"));
    return bool;
}

转载于:https://my.oschina.net/u/2351717/blog/1523174

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值