Расчет количества активных дней между диапазонами дат

У меня возникли проблемы с вычислением даты. Я постараюсь объяснить это как можно больше;

Допустим, у вас есть рекламный щит, и этот носитель имеет активный диапазон дат. Например, начало активного срока — 1 декабря каждого года, а конец активного срока — 1 марта каждого года.

Учтите, что вы арендуете этот рекламный щит кому-то на определенный срок. Примером диапазона дат является период с 1 февраля 2017 года по 10 декабря 2020 года. Как в этом периоде я могу рассчитать количество оплачиваемых дат? Попытка сделать это с php, но застрял. Кто-нибудь может помочь мне сделать это, не имея слишком много предложений «если»?

редактировать:

    $activeTermStart = "01/12"; // 'd/m'
$activeTermEnd = "01/03"; // 'd/m'

$daterangeStart = new \DateTime('2017-02-01');
$daterangeEnd = new \DateTime('2020-12-10');

//check if active term start&end have year diff
$hasYearDiffBetweenTermStartAndEnd = false;

$startArray = explode('/',$activeTermStart);
$endArray = explode('/',$activeTermEnd);
if ($startArray[1]>$endArray[1]) {
$hasYearDiffBetweenTermStartAndEnd = true;
}
if ($startArray[1]==$endArray[1] && $startArray[0]>=$endArray[0]) {
$hasYearDiffBetweenTermStartAndEnd = true;
}

$startTermWithYear = \DateTime::createFromFormat('d/m/Y',$activeTermStart.'/'.date('Y'));
$startTermWithFirstYear = \DateTime::createFromFormat('d/m/Y',$activeTermStart.'/'.$daterangeStart->format('Y'));
if ($hasYearDiffBetweenTermStartAndEnd) {
$endTermWithYear = \DateTime::createFromFormat('d/m/Y',$activeTermEnd.'/'.(date('Y')+1));
$endTermWithFirstYear = \DateTime::createFromFormat('d/m/Y',$activeTermEnd.'/'.((int)$daterangeStart->format('Y')+1);
} else {
$endTermWithYear = \DateTime::createFromFormat('d/m/Y',$activeTermEnd.'/'.date('Y'));
$endTermWithFirstYear = \DateTime::createFromFormat('d/m/Y',$activeTermEnd.'/'.$daterangeStart->format('Y'));
}

$maximumBillableDaysPerYear = ($endTermWithYear->getTimestamp() - $startTermWithYear->getTimestamp())/60/60/24;

$totalYearsToCheck = ((int)$daterangeEnd->format('Y') - (int)$daterangeStart->format('Y'))+1;

$maximumBillableDaysTotal = $totalYearsToCheck *  $maximumBillableDaysPerYear;

// from that moment on, i want to see how many days are not in the first year and
// how many days are not in the last year. Remove them from the maximumBillableDaysTotal to
// see how many days that billboard is billable for.
// stucked here...

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]