Задать вопрос
Этот вопрос закрыт для ответов, так как повторяет вопрос Как найти пересечение двух диапазонов дат?
mbhusty
@mbhusty

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

С фронта приходит диапазон дат (при создании элемента), например 01.09.22 - 10.09.22 и нужно проверить что элемента с таким периодом еще не существует.
Причем нельзя создать элемент с пересекающимся периодом, например 09.09-15.09.
Как это можно сделать?
  • Вопрос задан
  • 364 просмотра
Подписаться 1 Простой 1 комментарий
Ответы на вопрос 4
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Когда диапазоны НЕ пересекаются? Когда один из них идёт после другого. То есть, первый диапазон заканчивается раньше, чем начинается второй или наоборот, второй заканчивается раньше, чем начинается первый. Запишем формально:
$isNotOverlapped = $range2start > $range1end || $range1start > $range2end;

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

Но, если вспомнить булеву алгебру, то !(A || B) = !A && !B. Значит можем записать:
$isOverlapped = $range2start <= $range1end && $range1start <= $range2end;
Ответ написан
Adamos
@Adamos
Два временных интервала не пересекаются, если начало и конец одного из них раньше начала второго. Элементарное условие.
Ответ написан
@Acvoloe
Перевести дату в unix формат с помощью
strtotime()
затем сравнить два диапазона с помощью цикла
Ответ написан
sergiks
@sergiks Куратор тега PHP
♬♬
  1. ассоциативный массив, где ключи даты, значения обозначают начало это или конец интервала.
  2. отсортировать по ключам
  3. двигаться слева направо, следить чтобы не было два начала подряд.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы