时间段的验证问题

太久 2010-08-10 10:36:58
现在有4个时间段,分别有起始时间和结束时间,一共8个时间点.大致如下:

时间段 开始时间 结束时间
T1 S1 E1
T2 S2 E2
T3 S3 E3
T4 S4 E4

现在要保证T1~T4,4个时间段不重叠(也就是类似E1>S2),而且开始时间和结束时间都为00:00的时候则不去判断该时间段.比如:
T1 01:00 02:00
T2 00:00 00:00
T3 01:00 03:00
T4 04:00 05:00
虽然E1>S2,但是 S2和E2都为00:00,所以忽略.但此时E1>S3,所以还是应该弹出提示.
怎么样做一个完整的验证?大家帮帮忙哈,谢谢了




...全文
167 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghty_lyf 2012-11-23
  • 打赏
  • 举报
回复
- -楼主 你是怎么调用的啊 求教 求完整版的。
太久 2010-08-24
  • 打赏
  • 举报
回复
呵呵,多谢啦,分也加了.
一直没空看,今天研究了下确实不错.
太久 2010-08-10
  • 打赏
  • 举报
回复
呵呵,好的.
yixianggao 2010-08-10
  • 打赏
  • 举报
回复
lz 再加些分,俺就告诉你,呵呵

俺想一下先
yixianggao 2010-08-10
  • 打赏
  • 举报
回复
对了,你把 debug 下面那句打开就明白了
                // [DEBUG]
//alert(first + "\r\n" + second);
yixianggao 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zengyi906 的回复:]
汗,比我想的长多了.
弹出true就不对啊,T1和T3重叠了,我再研究下你写的
[/Quote]
呵呵,不用研究了,

Period.HasOverlap 返回 true 表示有重叠,没重叠时才返回 false!

俺贴的都是经过测试的代码,两颗星可不是混的,嘿嘿
太久 2010-08-10
  • 打赏
  • 举报
回复
汗,比我想的长多了.
弹出true就不对啊,T1和T3重叠了,我再研究下你写的
yixianggao 2010-08-10
  • 打赏
  • 举报
回复
建了 Time 和 Period 两个对象,代码比较多,但很容易扩展,
不明白的话就查查手册

L@_@K
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>javascriptExtension.TimePeriodCompare.html</title>
<meta name="generator" content="editplus" />
<meta name="author" content="yixianggao@126.com" />
<meta name="keywords" content="" />
<meta name="description" content="" />
</head>
<body>
<script type="text/javascript">
<!--

function Time(hourNumber, minuteNumber) {
if (isNaN(hourNumber) || hourNumber < 0 || hourNumber > 23)
throw new Error("Time 实例化失败:无效的小时数,合理取值范围是 0 至 23。无效值为 " + hourNumber);
if (isNaN(minuteNumber) || minuteNumber < 0 || minuteNumber > 59)
throw new Error("Time 实例化失败:无效的分钟数,合理取值范围是 0 至 59。无效值为 " + minuteNumber);

this.Hour = hourNumber;
this.Minute = minuteNumber;
}
Time.prototype.toString = function() {
var h = (this.Hour < 10) ? ("0"+this.Hour) : this.Hour;
var m = (this.Minute < 10) ? ("0"+this.Minute) : this.Minute;
return h + ":" + m;
};
/*
负值,如果所传递的第一个参数比第二个参数小。
零,如果两个参数相等。
正值,如果第一个参数比第二个参数大。
*/
Time.Compare = function(firstTime, secondTime) {
var returnValue = 0;
if (firstTime.Hour > secondTime.Hour)
returnValue++;
else if (firstTime.Hour < secondTime.Hour)
returnValue--;
else {
if (firstTime.Minute > secondTime.Minute)
returnValue++;
else if (firstTime.Minute < secondTime.Minute)
returnValue--;
}
return returnValue;
};
Time.Parse = function(timeString) {
var hm = timeString.split(":");
return new Time(parseInt(hm[0],10), parseInt(hm[1],10));
};

function Period(startTimeString, endTimeSting) {
var start = Time.Parse(startTimeString);
var end = Time.Parse(endTimeSting);

if (Time.Compare(start, end) == 1)
throw new Error("Period 实例化失败:非法的起止时间,起始时间应小于或等于终止时间。起始时间为 " + startTimeString + ",终止时间为 " + endTimeSting);

this.StartTime = start;
this.EndTime = end;
}
Period.prototype.toString = function() {
return this.StartTime + " - " + this.EndTime;
};
Period.prototype.IsZero = function() {
var zero = "00:00";
if (this.StartTime == zero && this.EndTime == zero)
return true;
else
return false;
};
Period.Compare = function(firstPeriod, secondPeriod) {
var returnValue = 0;
if (Time.Compare(firstPeriod.StartTime, secondPeriod.StartTime) == 1)
returnValue++;
else if (Time.Compare(firstPeriod.StartTime, secondPeriod.StartTime) == -1)
returnValue--;
else {
if (Time.Compare(firstPeriod.EndTime, secondPeriod.EndTime) == 1)
returnValue++;
else if (Time.Compare(firstPeriod.EndTime, secondPeriod.EndTime) == -1)
returnValue--;
}
return returnValue;
};
// 判断给定的时段数组中是否存在时段重叠。
Period.HasOverlap = function(periodArray) {
if (periodArray instanceof Array)
{
var copyPeriodList = periodList.slice(0);
// 排序后,所有的 Zero 都排列到数组前端。
copyPeriodList.sort(Period.Compare);

var first, second;
var len = copyPeriodList.length - 1;
for (var i=0; i<len; i++)
{
if (copyPeriodList[i].IsZero())
continue;

first = copyPeriodList[i];
second = copyPeriodList[i+1];

if (Time.Compare(first.EndTime, second.StartTime) == 1)
{
// [DEBUG]
//alert(first + "\r\n" + second);
return true;
}
}

return false;
}
else
throw new Error("periodArray 为非法类型参数,须传入 Array 实例。");
};

/*
T1 01:00 02:00
T2 00:00 00:00
T3 01:00 03:00
T4 04:00 05:00
*/
var periodList = new Array();
periodList.push(new Period("01:00", "02:00"));
periodList.push(new Period("00:00", "00:00"));
periodList.push(new Period("01:00", "03:00"));
periodList.push(new Period("04:00", "05:00"));

alert(Period.HasOverlap(periodList));
//-->
</script>
</body>
</html>


Web 开发常用手册

DHTML 参考手册
http://download.csdn.net/source/308913

JScript 语言参考
http://download.csdn.net/source/308916

CCS 样式表中文手册
http://download.csdn.net/source/304124

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧