日期:2014-05-16  浏览次数:20401 次

求一个关于时间段的算法, 关于时间段不能重叠的问题
比如某个房间,已经被预定了下面的时间段:
2014-03-16至2014-04-16
2014-06-25至2014-8-25
2014-11-01至2014-12-01
... (其它已预定的时间段)

如果有人再预定,时间段不能和上面的时间段重叠,例如2014-04-10至2014-05-10是不允许的(和第一行的时间段部分重叠),而2014-04-17至2014-05-17是可以的...

请问怎么写? 伪代码也可以

------解决方案--------------------
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
function test(str){
var a=['2014-03-16至2014-04-16','2014-06-25至2014-8-25','2014-11-01至2014-12-01'];
var n=sp(str);
var m=0;
for(var i=0,len=a.length;i<len;i++){
var k=sp(a[i]);
if(k[0]>n[1]
------解决方案--------------------
k[1]<n[0]){
m++;
}else{
break;
}
}
return m==a.length;
}
function sp(str){
return str.split('至');
}
alert(test('2014-04-10至2014-05-10'));
alert(test('2014-04-17至2014-05-17'));
</script>
</head>

<body>
</body>
</html>

------解决方案--------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> New Document </title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
 </head>

 <body>
  <script type="text/javascript">
  <!--
function datebet(start,end){
this.start = start;
this.end = end;

this.checkIn = function(p){
if(p.start>=this.start && p.start<=this.end){
return true;
}
if(p.end >= this.start && p.end <= this.end){
return true;
}
return false;
}
}

var dbed = [new datebet('2014-03-16','2014-04-16'),new datebet('2014-06-25','2014-08-25'),new datebet('2014-11-01','2014-12-01')];

function checkOk(dbs,p){
for(var i = 0;i<dbs.length;i++){
var db = dbs[i];
if(db.checkIn(p)){
return false;
}
}
return true;
}

var p1 = new datebet('2014-04-10','2014-05-10');
var p2 = new datebet('2014-04-17','2014-05-17');

document.writeln(checkOk(dbed,p1));
document.writeln(checkOk(dbed,p2));
  //-->
  </script>
 </body>
</html>