• Как проверить вхождение диапазона дат в определенный диапазон?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Когда диапазоны НЕ пересекаются? Когда один из них идёт после другого. То есть, первый диапазон заканчивается раньше, чем начинается второй или наоборот, второй заканчивается раньше, чем начинается первый. Запишем формально:
    $isNotOverlapped = $range2start > $range1end || $range1start > $range2end;

    Когда диапазоны пересекаются? Очевидно, что нам просто нужна инверсия предыдущего условия.
    $isOverlapped = !($range2start > $range1end || $range1start > $range2end);

    Но, если вспомнить булеву алгебру, то !(A || B) = !A && !B. Значит можем записать:
    $isOverlapped = $range2start <= $range1end && $range1start <= $range2end;
    Ответ написан