Ваша задача, похоже, вообще не требует функций даты. Достаточно будет простого поискового массива.
- Вычтите целочисленное значение начального дня из целого числа конечного дня.
- Если разница будет равна нулю или меньше, добавьте 7, чтобы всегда возвращать правильное, положительное количество дней.
Код: (Демо)
function daysUntil($start, $end) {
$lookup = [
'Sunday' => 0,
'Monday' => 1,
'Tuesday' => 2,
'Wednesday' => 3,
'Thursday' => 4,
'Friday' => 5,
'Saturday' => 6
];
$days = $lookup[$end] - $lookup[$start] + ($lookup[$end] <= $lookup[$start] ? 7 : 0);
return "{$days} days from {$start} to {$end}\n";
}
echo daysUntil('Wednesday', 'Saturday'); // Thursday, Friday, Saturday
echo daysUntil('Monday', 'Friday'); // Tuesday, Wednesday, Thursday, Friday
echo daysUntil('Thursday', 'Thursday'); // [assumed next week]
echo daysUntil('Friday', 'Monday'); // Saturday, Sunday, Monday
echo daysUntil('Saturday', 'Sunday'); // Sunday
echo daysUntil('Sunday', 'Saturday'); // Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
echo daysUntil('Sunday', 'Wednesday'); // Monday, Tuesday, Wednesday
Выход:
3 days from Wednesday to Saturday
4 days from Monday to Friday
7 days from Thursday to Thursday
3 days from Friday to Monday
1 days from Saturday to Sunday
6 days from Sunday to Saturday
3 days from Sunday to Wednesday
Или вы можете заменить массив поиска четырьмя вызовами функций и получить тот же результат: (Демонстрация)
function daysUntil($start, $end) {
$days = date('w', strtotime($end)) - date('w', strtotime($start));
$days += $days < 1 ? 7 : 0;
return "{$days} days from {$start} to {$end}\n";
}
person
mickmackusa
schedule
08.11.2017