我有开始和结束时间以及date.like this
stime:1pm , etime:2pm , date:2/6/2013
我想将此开始和结束时间和日期存储到mongodb中。所以在保存这个细节之前
,我应该在这个日期内检查,这个时间范围是否存在
所以如何在javascript中做到这一点。如何检查时间范围是否已经存在?
我试过这样。但是它运作不正常。即使我不知道我的方法,无论是对还是错?
我希望有人帮助我找到解决方案。
var d0 = new Date("01/01/2001 " + "8:30 AM");
var d1 = new Date("01/01/2001 " + "9:00 PM");
var d2 = new Date("01/01/2001 " + "8:30 AM");
var d3 = new Date("01/01/2001 " + "9:00 PM");
if(d2<d0&&d3<=d0||d2<d1&&d3<=d3)
{
console.log("available");
}else{
console.log("not available");
}
答案 0 :(得分:10)
使用timestamp而不是Date对象,以便有效地比较范围。对于数据库来说,按时间戳索引它也会更有效率
如果您不知道时间跨度的日期对象中的哪个时间早,那么您可以执行min
和max
检查。但如果您确实知道之前的时间和之后的时间,则需要min
,max
。
条件波纹管检查时间间隔重叠,这意味着它将是true
,即使只是第一个时间跨度的最后一秒与第二个时间跨度的第一秒重叠。
您可以对包含进行其他检查,并确定哪些包含哪些,但这些条件不同。
// time of first timespan
var x = new Date('01/01/2001 8:30:00').getTime();
var y = new Date('01/01/2001 9:30:00').getTime();
// time of second timespan
var a = new Date('01/01/2001 8:54:00').getTime();
var b = new Date('01/01/2001 9:00:00').getTime();
if (Math.min(x, y) <= Math.max(a, b) && Math.max(x, y) >= Math.min(a, b)) {
// between
}
答案 1 :(得分:0)
我有另一个解决方案,我们可以使用Moment.js插件的Moment-range
请检查此Moment Range。
var start = new Date(2012, 4, 1);
var end = new Date(2012, 4, 23);
var lol = new Date(2012, 4, 15);
var wat = new Date(2012, 2, 27);
var range = moment().range(start, end);
var range2 = moment().range(lol, wat);
range.contains(lol); // true
range.contains(wat); // false