95 votes

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

Cette fonction semble ne renvoyer que des faux. L'un d'entre vous obtient-il le même résultat ? Je suis sûr que je néglige quelque chose, mais un regard neuf 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 en utilisant ce qui suit :

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

15 votes

Votre true et false ne doivent pas être citées comme des chaînes de caractères. De plus, votre code devrait donner une erreur d'analyse et ne pas s'exécuter du tout à cause de l'erreur d'encodage } dans votre si.

236voto

ThiefMaster Points 135805

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

12 votes

Si vous utilisez PHP < 5, utilisez return date('w', strtotime($date)) % 6 == 0 est un peu plus court.

25 votes

Bien que cela fasse la même chose, je dirais que la vérification explicite est plus évidente pour quelqu'un qui lit le code.

2 votes

Mais c'est à ça que servent les commentaires.

11voto

reko_t Points 22121

Ici :

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

10voto

Hoàng Long Points 4513

La version fonctionnelle de votre code (à partir des erreurs signalées par BoltClock) :

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

?>

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

0 votes

Vous ne devez pas non plus renvoyer les cotations true ou false - ou mieux encore, renvoyer simplement la condition.

0 votes

@alex : J'utilise "echo" pour confirmer le résultat, donc c'est tout. Merci pour le conseil.

3voto

Max Points 37

Pour les gars comme moi, qui ne sont pas minimalistes, il existe une extension PECL appelée " intl ". Je l'utilise pour la conversion d'idn car elle fonctionne bien mieux que l'extension "idn" et certaines 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). Le IntlCalendar a une méthode IntlCalendar::isWeekend pour cela. Peut-être que vous allez tenter votre chance, j'aime bien le fait que "ça marche pour presque tous les pays" sur ces classes internationales.

EDIT : Je ne suis pas sûr mais depuis PHP 5.5.0, l'extension intl est intégrée à PHP (--enable-intl).

0voto

shridhar Points 49
    <?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, 'd-m-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 ";
}
}
    ?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X