文档章节

时间区间伪代码片段

王春-海子
 王春-海子
发布于 2017/08/24 23:30
字数 463
阅读 16
收藏 0

方案一:循环落入区间法

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;
}

© 著作权归作者所有

王春-海子
粉丝 7
博文 49
码字总数 11981
作品 0
江北
技术主管
私信 提问
关于单页Web应用js对象资源释放问题

单页应用中,一般定义一个div作为加载其他页面的容器。如果被加载的页面中定义了全局的js变量,那么即使这个div去加载其他页面,上一个页面中定义的js变量依然不会被释放。请问各位大侠一般怎...

iamlichao
2014/05/14
265
1
C# 判断一个时间点是否位于给定的时间区间(字符串格式)

本文中实现了函数 static bool isLegalTime(DateTime dt, string time_intervals); 给定一个字符串表示的时间区间time_intervals: 1)每个时间点用六位数字表示:如12点34分56秒为123456 2)...

北风其凉
2014/07/15
2.4K
0
HTTP chunked编码数据流解析算法

一.关于HTTP数据传输中的内容长度 在HTTP传输过程中,Content-Length用来表示响应消息体的大小,通常带有Content-Length的数据是图片,媒体资源,静态文本,网页,还有些文档。通常Content-L...

IamOkay
2016/04/27
4.1K
1
webpack及node.js基础必会--path模块的常见操作

前言 在没有相关经验的同学,在学习webpack和使用node时,经常会遇到 等,这时往往会一脸懵逼这些都是什么,干嘛的,为什么这些资料和书都完全不提,难道就我不知道 -。- 其实path模块是很常...

shotCat
04/15
0
0
Joda-time学习笔记

一、joda的优点展示 joda-time能够便捷地格式化时间输出、设定时间、加减时间、计算时间差值。跟JDK的Date/Calender相比一试便知,每个测试中上半部分是用jdk操作,下半部是用joda-time操作。...

刀狂剑痴
2015/08/27
3.9K
0

没有更多内容

加载失败,请刷新页面

加载更多

android抓取app启动类

adb shell,然后logcat | grep "ActivityManager: START"

安卓工程师王恒
17分钟前
11
0
并发编程之Java锁

一、重入锁 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized(重量级) 和 ReentrantLock(轻量级)等等 ) 。这些已经写好提供的锁为我们开发提供了便利。 重入锁...

codeobj
21分钟前
10
0
云栖深度干货 | 打造“云边一体化”,时序时空数据库TSDB技术原理深度解密

本文选自云栖大会下一代云数据库分析专场讲师自修的演讲——《TSDB云边一体化时序时空数据库技术揭秘》 自修 —— 阿里云智能数据库产品事业部高级专家 认识TSDB 第一代时序时空数据处理工具...

开源中国小二
22分钟前
9
0
mobile-nfv运行步骤

1. 编译过程 在 [workspaces] 的 <workdir> 目录运行以下命令: $ nfv-build make clean all... $ nfv-build make mobile-package...*** PACKAGE BUILT AT: /vob/BUG_117504/casa/nfv/b......

Robotcl_Blog
31分钟前
10
0
如何对邮箱做域名验证

做客户开发的时候,邮件群发仍然是个有效的手段。如果发海外邮件的话,选个服务器在国外的邮箱比较好,因为邮件抵达率会比较高一些。比如gmail, zoho mail等等,都可以。本文以zoho mail为例...

Zoho云服务
32分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部