Привет, на скриншоте представлена строка range которая хранит в себе значение диапазона дат (даты разделяются '-')
Есть массив диапазонов дат (intervals на скрине), он хранит в себе уже заранее известные диапазоны дат, в таком же формате как мы получаем их из вне в переменную range
Задача состоит в том, что нужно узнать сколько дней из каждого из диапазона в массиве пользователь затронул указав в форме свой диапазон.
Допустим пользователь выбрал дату 29.05-10.07
Нужно узнать сколько дней из каждого из диапазона в массиве он как бы 'захватил'
Заранее спасибо.

Получилось так, может есть более простой вариант, не знаю. Проверьте, правильно ли работает
<?
$range = '27.05-24.08';
$intervals = [
'25.05-09.06',
'10.06-30.06',
'15.09-30.09'
];
$range_array = explode ('-', $range); // разбиваем строку на 2 части (дата начала и конца)
$target_start = DateTime::createFromFormat('d.m', $range_array[0]); // создаем объект дата-время по нужному формату
$target_end = DateTime::createFromFormat('d.m', $range_array[1]);
foreach ($intervals as $interval) { // работаем с каждым интервалом
$interval_array = explode ('-', $interval); // разбиваем строку интервала на части
$interval_start = DateTime::createFromFormat('d.m', $interval_array[0]);
$interval_end = DateTime::createFromFormat('d.m', $interval_array[1]);
$interval_end->modify('+1 day'); // затычка т. к daterange не включает последний день
$interval = new DateInterval('P1D'); // устанавливаем интервал 1 день
$daterange = new DatePeriod ($interval_start, $interval, $interval_end); // разбивает дату на интервалы
$count_includes_days = 0; // счетчик дней, которые входят в $range
foreach ($daterange as $date) { // проходимся по каждому дню интервала
if ($date >= $target_start && $date <= $target_end) $count_includes_days ++; // увеличиваем, если дата интервала входит в $range
}
$result_array[] = $count_includes_days; // добавляем количество дней в новый массив
}
print_r ($result_array); // выводим массив
?>
Результат:
Array
(
[0] => 14
[1] => 21
[2] => 0
)
Сначала парсишь саму дату из строки
$start = strtotime('25.05.2019');
$end = strtotime('09.06.2019');
Потом делаешь так:
$diff = (strtotime ($start)-strtotime ($end))/(60*60*24);
echo $diff; // Столько то дней между датами.
P.S 60*60*24 - это мы получаем сутки (60 сек * 60 мин * 24 часа)
P.S.S Нужно использовать год, для strtotime, иначе вернет false. И не забудь сделать проверку в последнем месяце года, чтобы не получилось 25.12.2019 - 01.01.2019
При выборе например с 10 июня по 13 - результат будет 4
Но все равно огромное спасибо, сейчас буду думать как это исправить (или вы ответьте если не тяжело)