Проверка даты на выходных PHP

Кажется, что эта функция возвращает только false. Кто-нибудь из вас получает то же самое? Я уверен, что я что-то пропускаю, однако, свежие глаза и все такое …

function isweekend($date){ $date = strtotime($date); $date = date("l", $date); $date = strtolower($date); echo $date; if($date == "saturday" || $date == "sunday") { return "true"; } else { return "false"; } } 

Я вызываю функцию, используя следующее:

 $isthisaweekend = isweekend('2011-01-01'); 

Если у вас PHP> = 5.1:

 function isWeekend($date) { return (date('N', strtotime($date)) >= 6); } 

в противном случае:

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

Другой способ – использовать класс DateTime , таким образом вы также можете указать часовой пояс. Примечание: PHP 5.3 или выше.

 // For the current date function isTodayWeekend() { $currentDate = new DateTime("now", new DateTimeZone("Europe/Amsterdam")); return $currentDate->format('N') >= 6; } 

Если вам нужно проверить определенную строку даты, вы можете использовать DateTime :: createFromFormat

 function isWeekend($date) { $inputDate = DateTime::createFromFormat("dmY", $date, new DateTimeZone("Europe/Amsterdam")); return $inputDate->format('N') >= 6; } 

Красота такого способа заключается в том, что вы можете указать часовой пояс без изменения глобального часового пояса в PHP, что может вызвать побочные эффекты в других сценариях (например, WordPress).

Вот:

 function isweekend($year, $month, $day) { $time = mktime(0, 0, 0, $month, $day, $year); $weekday = date('w', $time); return ($weekday == 0 || $weekday == 6); } 

Рабочая версия вашего кода (из ошибок, отмеченных BoltClock):

 <?php $date = '2011-01-01'; $timestamp = strtotime($date); $weekday= date("l", $timestamp ); $normalized_weekday = strtolower($weekday); echo $normalized_weekday ; if (($normalized_weekday == "saturday") || ($normalized_weekday == "sunday")) { echo "true"; } else { echo "false"; } ?> 

Заблудиться «{» трудно увидеть, особенно без достойного редактора PHP (в моем случае). Поэтому я публикую исправленную версию здесь.

Если вы используете PHP 5.5 или PHP 7 выше, вы можете использовать:

 function isTodayWeekend() { return date("l") == "Saturday" or date("l") == "Sunday"; } 

и он вернет «истину», если сегодня выходной и «ложный», если нет.

Для таких парней, как я, которые не являются минималистичными, существует расширение PECL под названием « intl ». Я использую его для преобразования idn, поскольку он работает лучше, чем расширение idn, и некоторые другие классы n1, такие как «IntlDateFormatter».

Ну, я хочу сказать, что расширение «intl» имеет класс под названием «IntlCalendar», который может обрабатывать многие международные страны (например, в Саудовской Аравии, воскресенье не является выходным днем). Для этого IntlCalendar имеет метод IntlCalendar :: isWeekend . Может быть, вы, ребята, сделали это, мне нравится, что «это работает практически для каждой страны» на этих intl-классах.

EDIT: Не совсем уверен, но с PHP 5.5.0 расширение intl связано с PHP (–enable-intl).

 <?php $strt_date = date_create('2013-11-11'); $end_date = date_create('2013-11-18'); date_sub($strt_date, date_interval_create_from_date_string('1 day')); $interval = date_diff($strt_date, $end_date); $num = $interval->format('%a'); for ($i = 0; $i < $num; $i++) { date_add($strt_date, date_interval_create_from_date_string('1 day')); $next_day = date_format($strt_date, 'dm-Y'); echo "<br>"; $new_date = new DateTime($next_day); $weeknum = $new_date->format('w'); if (($weeknum != 0) && ($weeknum != 6)) { echo "not a holiday :$next_day "; } } ?>