Проверка, является ли дата выходным 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');
 71
Author: Siarhey Uchukhlebau, 2011-01-26

7 answers

Если у вас есть 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);
}
 181
Author: ThiefMaster, 2011-01-26 07:57:36

Другой способ - использовать класс 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).

 33
Author: Brian, 2015-03-22 12:04:11

Здесь:

function isweekend($year, $month, $day)
{
    $time = mktime(0, 0, 0, $month, $day, $year);
    $weekday = date('w', $time);
    return ($weekday == 0 || $weekday == 6);
}
 9
Author: reko_t, 2011-01-26 07:56:35

Рабочая версия вашего кода (с учетом ошибок, на которые указал 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
Author: Hoàng Long, 2017-02-23 06:57:38

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

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

И он вернет "истину", если сегодня выходные, и "ложь", если нет.

 6
Author: Harvey, 2016-10-17 13:34:16

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

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

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

 1
Author: boesing, 2013-11-20 09:24:41

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

function isThisDayAWeekend($date) {

    $timestamp = strtotime($date);

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

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

}
 1
Author: Wynn, 2018-07-14 12:15:59