Как проверить временной диапазон в JavaScript

У меня есть время начала и окончания вместе с датой. как это

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

2 ответа

Решение

Используйте метку времени вместо объекта Date для эффективного сравнения диапазонов. Это также будет намного более эффективно для базы данных индексировать по метке времени.
Если вы не знаете, какое время раньше в паре дат для временных интервалов, тогда вы можете сделать min а также max чеки. Но если вы знаете, какое время до, а какое после, нет min, max в состоянии требуется.
Условие ниже проверяет, перекрываются ли временные промежутки, что означает, что true даже если только последняя секунда первого временного интервала перекрывается первой секундой второго временного интервала.
Вы можете сделать другие проверки для Contain и определить, какие из них содержат какие, но это другое условие.

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

У меня есть другое решение для этого, мы можем использовать Moment-range, который является плагином для Moment.js

Просто проверьте этот диапазон моментов.

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
Другие вопросы по тегам