Задать вопрос
serejatoje
@serejatoje

Сколько дней в пересечении двух дат?

Всем привет! Ребят, кто знает как вычислить количество дней в пересечении двух дат?
Например есть интервал от 01.01.2019 и до 15.01.2019. И второй интервал дат 11.01.2019 и до 22.01.2019.
Тут пересекаются даты с 11 по 15 января. В итоге 5 дней.
  • Вопрос задан
  • 222 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 3
kawabanga
@kawabanga
Я знаю!

1) приводите к одному виду (например int), и узнаете, действительно ли периоды пересекаются.
там может быть, что один в другом, или они вообще не пересекаются, либо могут быть даже одинаковыми.
2) берете две даты посередине, и считаете дни - php.net/manual/ru/datetime.diff.php
Ответ написан
Lobotomist
@Lobotomist
Software Developer
Пересечение двух диапазонов дат получить довольно просто - это разница между самым поздним началом и самым ранним концом этих периодов.

/**
 * Предполагается, что dateStart <= dateEnd. Если это не гарантируется, нужно их привести к такому виду внутри функции.
 */
function getIntersectDays(DateTime $dateStart1, DateTime $dateEnd1, DateTime $dateStart2, DateTime $dateEnd2) : int {
    $intersectionEnd = min($dateEnd1, $dateEnd2);
    $intersectionStart = max($dateStart1, $dateStart2);

    if ($intersectionStart >= $intersectionEnd) return 0;

    return (int)$intersectionStart->diff($intersectionEnd)->format('%a');
}
Ответ написан
@Deepin_OS
Пример:
$time = new DateTime('2018-08-07 10:30:00');// начало отсчёта
$time_off = new DateTime('2018-08-22 12:30:00');// конец отсчёта
$result = $time->diff($time_off);
echo "Между датами {$result->d} дн. {$result->h} час. {$result->i} мин.";
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы