我在这里尝试注册活动 2018年4月15日下午6点至晚上7点。
但是有些用户阻止了这个地方 从2018年4月10日到2018年4月18日,从下午4点到下午5点。
用户已从下午4点到下午5点阻止,不是从下午6点到下午7点。
我需要使用纯JavaScript来确定给定的日期和时间是否在阻止的日期和时间之间。
这是我到目前为止所尝试的。它不允许注册它。
var blockedstartTime = new Date("2018","04","10","16","00","00").getTime();
var blockedendTime = new Date("2018","04","18","17","00","00").getTime();
var eventstartTime = new Date("2018","04","15","18","00","00").getTime();
var eventendTime = new Date("2018","04","15","19","00","00").getTime();
if(Math.min(blockedstartTime, blockedendTime) < Math.max(eventstartTime,
eventendTime) && Math.max(blockedstartTime, blockedendTime) >
Math.min(eventstartTime, eventendTime)) {
console.log("Not Allow");
} else {
console.log("Allow");
}
感谢您的时间。
答案 0 :(得分:0)
以下代码块中的doesOverlap()
function
会检测start
end
的{{1}}和/或param
是否与A
重叠start
{1}}和/或end
param
B
。
isAvailable()
function
returns
false
doesOverlap()
returns
true
。{/ p>
有关详细信息,请参阅Array.prototype.some()
。
// Blocked times.
var blockedTimes = Array.from(new Array(9)).map(function(x, i) {
return {
start: new Date("2018","04",(10+i).toString(),"16","00","00"),
end: new Date("2018","04",(10+i).toString(),"17","00","00")
}
})
// Events.
var threeToFive = {
start: new Date("2018","04","15","15","00","00"),
end: new Date("2018","04","15","17","00","00")
}
var sixToSeven = {
start: new Date("2018","04","15","18","00","00"),
end: new Date("2018","04","15","19","00","00")
}
// Does overlap.
function doesOverlap(A, B) {
if (A.start > B.start && A.end < B.end) {
return 'A between B'
} else if (A.start < B.start && A.end > B.end) {
return 'A over B'
} else if (A.start < B.start && A.end > B.start) {
return 'A over B.start'
} else if (A.start < B.end && A.end > B.end) {
return 'A over B.end'
}
return false // No overlap.
}
// Is available.
function isAvailable(event, blockedTimes) {
return !blockedTimes.some(function(time) {
return doesOverlap(event, time)
})
}
// Proof.
console.log('Apr 15 3-5pm time slot is available:', isAvailable(threeToFive, blockedTimes))
console.log('Apr 15 6-7pm time slot is available:', isAvailable(sixToSeven, blockedTimes))
答案 1 :(得分:0)
你的问题是第一个用户从第一个日期到最后一个日期只有一个小时 - 也就是每天16:00到17:00之间。
现在,当您想要分配时间时,您需要获取所有预留时间的列表。在您的情况下,两个不同日期之间没有简单的范围。
var blocks = [];
blocks.push({
start: new Date("2018","04","10","16","00","00").getTime(),
end: new Date("2018","04","10","17","00","00").getTime();
});
blocks.push({
start: new Date("2018","04","11","16","00","00").getTime(),
end: new Date("2018","04","11","17","00","00").getTime();
});
我必须使用循环进行上述操作。
现在,您可以在此处测试给定范围是否与任何阻塞时间重叠。
var eventstartTime = new Date("2018","04","15","18","00","00").getTime();
var eventendTime = new Date("2018","04","15","19","00","00").getTime();
blocks.forEach(function(aBlock){
if ((eventstartTime > aBlock.start && eventstartTime < aBlock.end) ||
(eventendTime > aBlock.start && eventendTime < aBlock.end))
console.log('Not allowed')
})
它只会检查您的活动时间是否超过任何阻止时间。