Проверка, если дата выходного PHP - PullRequest
78 голосов
/ 26 января 2011

Эта функция, кажется, только возвращает 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');

Ответы [ 7 ]

185 голосов
/ 26 января 2011

Если у вас 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);
}
37 голосов
/ 22 марта 2015

Другой способ - использовать класс 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("d-m-Y", $date, new DateTimeZone("Europe/Amsterdam"));
    return $inputDate->format('N') >= 6;
}

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

9 голосов
/ 26 января 2011

Здесь:

function isweekend($year, $month, $day)
{
    $time = mktime(0, 0, 0, $month, $day, $year);
    $weekday = date('w', $time);
    return ($weekday == 0 || $weekday == 6);
}
8 голосов
/ 26 января 2011

Рабочая версия вашего кода (из ошибок, указанных 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 (в моем случае).Так что выкладываю исправленную версию здесь.

7 голосов
/ 17 октября 2016

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

function isTodayWeekend() {
    return in_array(date("l"), ["Saturday", "Sunday"]);
}

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

1 голос
/ 14 июля 2018

Это работает для меня и многоразово.

function isThisDayAWeekend($date) {

    $timestamp = strtotime($date);

    $weekday= date("l", $timestamp );

    if ($weekday =="Saturday" OR $weekday =="Sunday") { return true; } 
    else {return false; }

}
1 голос
/ 20 ноября 2013

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

Что я хочу сказать, так это то, что расширение int имеет класс IntlCalendar, который может обрабатывать многие международные страны (например, в Саудовской Аравии воскресенье не выходной). Для этого в IntlCalendar есть метод IntlCalendar :: isWeekend . Возможно, вы, ребята, попробуете, мне нравится этот факт "это работает почти для каждой страны" на этих международных классах.

РЕДАКТИРОВАТЬ: Не совсем уверен, но начиная с PHP 5.5.0, расширение intl поставляется с PHP (--enable-intl).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...