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

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

С фронта приходит диапазон дат (при создании элемента), например 01.09.22 - 10.09.22 и нужно проверить что элемента с таким периодом еще не существует.
Причем нельзя создать элемент с пересекающимся периодом, например 09.09-15.09.
Как это можно сделать?
  • Вопрос задан
  • 423 просмотра
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Skillbox
    PHP-разработчик. Базовый уровень
    3 месяца
    Далее
Ответы на вопрос 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. двигаться слева направо, следить чтобы не было два начала подряд.
Ответ написан
Ваш ответ на вопрос

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

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