Мне нужно выяснить перекрытие между 2-х временными диапазонами, и оно не включает в себя часть даты в сравнении, а только время, например, range_1 - 9 AM-6PM, а range_2 - 5 PM-8AM. Фактическое время в 24-часовом формате. Я написал решение, которое находит перекрытие, но оно не работает, когда любое время находится в кросс-день / после полуночи, например, 22:00-2AM
.
Оба времени относятся к одному и тому же дню, но мое текущее решение не работает должным образом, когда сравнение должно проводиться в любое время после полуночи. Например, он дает правильный выходной сигнал в случае range_1: 9 AM-6PM и range_2: 5 PM-8PM, дает правильное перекрытие выходных 5 PM-6PM, но не может найти перекрытие в случае range_1: 10 PM-2AM и range_2: 1 AM-3AM в тот же день.
Ниже приведена ссылка на мой кодовый блок:
https://codepen.io/anon/pen/NZOqJm?editors=0010
function overlap(t1,t2)
{
var timeFormat = "hh:mm";
let t1from = moment(t1.timeFrom,timeFormat);
let t1to = moment(t1.timeTo,timeFormat);
let t2from = moment(t2.timeFrom,timeFormat);
let t2to = moment(t2.timeTo,timeFormat);
let overlapFrom = null;
let overlapTo = null;
if (t2from.isBetween(t1from, t1to) && t2to.isBetween(t1from, t1to)) {
//complete overlap
overlapFrom = t2from;
overlapTo = t2to;
}
else if (t1from.isBetween(t2from, t2to) && t1to.isBetween(t2from, t2to))
{
overlapFrom = t1from;
overlapTo = t1to;
}
else if (t2from.isBetween(t1from, t1to)) {
overlapFrom = t2from;
overlapTo = t1to;
}
else if (t2to.isBetween(t1from, t1to)) {
overlapFrom = t1from;
overlapTo = t2to;
}
let doesOverlap = overlapFrom !== null && overlapTo !== null;
let response = {
doesOverlap: doesOverlap,
overlapingMinutes: doesOverlap ? Math.abs(moment.duration(overlapFrom.diff(overlapTo)).asMinutes()): 0,
overlapFrom,
overlapTo
}
return response;
}
/*let t1 = {
timeFrom:'22:00',
timeTo:'02:00'
}
let t2 = {
timeFrom:'01:00',
timeTo:'03:00'
}*/
let t1 = {
timeFrom:'09:00',
timeTo:'18:00'
}
let t2 = {
timeFrom:'17:00',
timeTo:'20:00'
}
console.log(overlap(t1,t2));
range_1: 10 PM-2AM
range_2: 1 AM-3AM
Правильный вывод должен быть: с 1:00 до 2:00
Поскольку оба времени совпадают, все время в течение дня и не включает в себя какую-либо дату. Считайте, что в это время каждый день учатся 2 ученика, а затем, когда они перекрываются