JS - Как сопоставить перекрывающиеся временные диапазоны? - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь создать пользовательский фильтр в Javascript, я пытаюсь вернуть true / match два временных диапазона, отформатированные в миллисекундном формате getTime (). Первый диапазон времени от объекта. Второй временной интервал взят из пользовательского ввода, указывающего время для фильтрации. В настоящее время мой код совпадает, когда второй временной диапазон попадает между минимальным и максимальным значениями первого временного диапазона, но я бы хотел, чтобы он совпадал, если есть какое-либо перекрытие между временными диапазонами вообще.

JS:

                var filter_from = new Date();
                filter_from.setHours(this.availability_from.split(/:/)[0]);
                filter_from.setMinutes(this.availability_from.split(/:/)[1]);
                filter_from = filter_from.getTime();

                var filter_to = new Date();
                filter_to.setHours(this.availability_from.split(/:/)[0]);
                filter_to.setMinutes(this.availability_from.split(/:/)[1]);
                filter_to = filter_to.getTime();

                var a_from = new Date();
                a_from.setHours((hits[i].availability.split("-")[0]).split(":")[0]);
                a_from.setMinutes((hits[i].availability.split("-")[0]).split(":")[1]);
                a_from = a_from.getTime();

                var a_to = new Date();
                a_to.setHours((hits[i].availability.split("-")[1]).split(":")[0])
                a_to.setMinutes((hits[i].availability.split("-")[1]).split(":")[1])
                a_to = a_to.getTime();



                if (Math.min(filter_from, filter_to) <= Math.max(a_from, a_to) && Math.max(filter_from, filter_to) >= Math.min(a_from, a_to)) {
                    console.log("matched");
                }

Любая помощь была бы удивительной, это меня смущает, спасибо! :)

1 Ответ

1 голос
/ 07 октября 2019

Существует перекрытие, когда любая из конечных точек попадает между конечными точками другого интервала.

if(  (filter_from < a_from && a_from < filter_to)
  || (filter_from < a_to   &&   a_to < filter_to)
  || (a_from < filter_from && filter_from < a_to)
  || (a_from < filter_to   &&   filter_to < a_to))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...