web-dev-qa-db-fra.com

Vérifier si la date est le week-end PHP

Cette fonction semble ne renvoyer que faux. Est-ce que certains d'entre vous obtiennent la même chose? Je suis sûr que je néglige quelque chose, cependant, des yeux neufs et tout ça ...

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";
    }
}

J'appelle la fonction de la manière suivante:

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

Si vous avez PHP> = 5.1:

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

autrement:

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

Une autre méthode consiste à utiliser la classe DateTime. Vous pouvez ainsi spécifier le fuseau horaire. Remarque: PHP 5.3 ou supérieur.

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

Si vous devez pouvoir vérifier une certaine chaîne de date, vous pouvez utiliser DateTime :: createFromFormat

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

La beauté de cette méthode réside dans le fait que vous pouvez spécifier le fuseau horaire sans le modifier globalement en PHP, ce qui pourrait provoquer des effets secondaires dans d'autres scripts (par exemple Wordpress).

39
Brian

Ici:

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

La version de travail de votre code (d'après les erreurs signalées par 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";
}

?>

Le "{" errant est difficile à voir, surtout sans un éditeur correct PHP (dans mon cas)). Je publie donc la version corrigée ici.

8
Hoàng Long

Si vous utilisez PHP 5.5 ou PHP 7 ci-dessus, vous voudrez peut-être utiliser:

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

et il retournera "vrai" si aujourd'hui est le week-end et "faux" sinon.

7
Harvey

Pour les gars comme moi, qui ne sont pas minimalistes, il existe une extension PECL appelée " intl ". Je l'utilise pour la conversion idn car il fonctionne bien mieux que l'extension "idn" et quelques autres classes n1 comme "IntlDateFormatter".

Eh bien, ce que je veux dire, c’est que l’extension "intl" a une classe appelée "IntlCalendar" qui peut gérer de nombreux pays internationaux (par exemple en Arabie Saoudite, le dimanche n’est pas un jour de week-end). IntlCalendar a une méthode IntlCalendar :: isWeekend pour cela. Peut-être que vous tentez votre chance, j'aime bien le fait "ça marche pour presque tous les pays" sur ces classes internationales.

EDIT: Pas tout à fait sûr, mais depuis PHP 5.5.0, l’extension intl est intégrée à PHP (--enable-intl).

2
boesing

Cela fonctionne pour moi et est réutilisable.

function isThisDayAWeekend($date) {

    $timestamp = strtotime($date);

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

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

}
1
Wynn