Executando verificação de segurança...
4

Muito bom!

Só pra complementar, a função também poderia ser assim:

function verificarInterseccao(a1, a2, b1, b2) {
    return !((b2 < a1) || (b1 > a2));
}

Ou seja, se uma das condições for verdade, retornará falso. Mas quando eu tenho algo como !(cond1 || cond2), eu posso trocar para (!cond1) && (!cond2) - as condições se invertem e troco o || por &&. Portanto, ficaria assim:

function verificarInterseccao(a1, a2, b1, b2) {
    return b2 >= a1 && b1 <= a2;
}

Como o operador && é short circuit, se a primeira condição não for verdadeira, ele nem testa a segunda, mantendo o funcionamento de já parar se o primeiro caso for falso.

Por fim, existe uma explicação parecida aqui, vale a leitura.

1

Muito bom, especialmente pela aplicação dos teoremas de Morgan para simplificação boleana, porém apesar de simplificar a expressão e ser muito útil para a construção de circuitos, temos que tomar cuidado pois prejudica a leitura do código, contudo, dependendo do cenário e de quantas comparações serão evitadas, é um ótimo recurso. Neste meu exemplo quis trazer uma explicação mais básica e didática.

0

Partindo da premissa de que os intervalos foram ordenados de forma crescente pela data inicial e que a data final sempre será maior que a data inicial, pode-se concluir que b2 sempre será maior que a1 e assim é possível omitir essa comparação, restando apenas:

function verificarInterseccao(a2, b1) {
    return b1 <= a2;
}