Данный период охватывает как минимум одну ночь в выходные дни.

Мне нужно проверить, что данный период будет, по крайней мере, охватывать одну ночь выходных (суббота или воскресенье) (см. статья в вики о правиле).

я нашел этот вопрос что, как проверить дату падения на выходные или нет,

function isWeekend($date) {
$weekDay = date('w', strtotime($date));
return ($weekDay == 0 || $weekDay == 6);
}

Но все же я борюсь с тем, как реализовать функцию, чтобы получить следующие результаты выборки для заданных периодов,

Периоды выборки и результаты:

04-01-2016 / 07-01-2016 : false
04-01-2016 / 09-01-2016 : false
04-01-2016 / 10-01-2016 : true (covers saturday night)
03-01-2016 / 07-01-2016 : true (covers sunday night)
04-01-2016 / 14-01-2016 : true (covers a full weekend)

Правило должно начинаться с даты начала, приходящейся на выходные, или с даты окончания, приходящейся на воскресенье или период, охватывающий полные выходные.

0

Решение

Я полагаю, вы ищете что-то вроде этого:

function coversWeekend($start, $end) {
$weekend       = [0, 6]; // 0 for Sunday, 6 for Saturday.

// Loop over the date period.
while ($start < $end) {
if (in_array($start->format('w'), $weekend)) {
return true;
}

$start->modify('+1 day');
}

return false;
}

Имейте в виду, что при проверке того, что пользователь передает, нет проверки. Вы можете добавить проверку, что для каждого параметра был передан действительный объект DateTime.

Надеюсь, поможет.

Редактировать: Обновлено решение с отзывами @ honzalilak.

2

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

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

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