Essayer de comprendre ce qui suit:

J'ai un club qui fonctionne 3 jours par semaine, mardi, jeudi et samedi.

Je veux imprimer la prochaine date du club de cette semaine, donc si mardi est la prochaine réunion imprimez "mardi" ou si aujourd'hui est mardi, imprimez "Aujourd'hui", même pour jeudi et samedi.

J'ai le code suivant :

<?php
  $current = date('l', strtotime('now'));
  $tuesday = date('l', strtotime('tuesday this week'));
  $thursday = date('l', strtotime('thursday this week'));
  $saturday = date('l', strtotime('saturday this week'));

  if ($tuesday < $current) {
    echo "Tuesday in the future";
  } else if ($thursday < $current) {
    echo "Thursday in the future";
  } else if ($saturday < $current) {
    echo "Saturday in the future";
  }
 ?>

Et c'est là que j'ai échoué et que je n'ai pas pu le comprendre ... car il imprime toujours "mardi dans le futur".

Toute aide, suggestion ou explication serait la bienvenue!

Merci E

php
3
Eddy H 2 sept. 2020 à 20:45

3 réponses

Meilleure réponse

Vous comparez la chaîne avec date('l'). Changez date('l') avec date('Ymd'), ou laissez simplement strtotime, alors vous pouvez comparer les nombres. Vous devrez peut-être un «mardi la semaine prochaine» si dimanche.

<?php

$current = strtotime('now');
$tuesday = strtotime('tuesday this week');
$thursday = strtotime('thursday this week');
$saturday = strtotime('saturday this week');
$nextTuesday = strtotime('tuesday next week');

if ($tuesday > $current) {
    echo "Tuesday in the future";
} else if ($thursday > $current) {
    echo "Thursday in the future";
} else if ($saturday > $current) {
    echo "Saturday in the future";
} else if($nextTuesday > $current) {
    echo "Tuesday in the future";
}
2
Felippe Duarte 2 sept. 2020 à 17:52

Le problème avec votre code est que vous comparez des variables de type string, qui ne fonctionneront pas comme vous le souhaitez.

J'ai utilisé une autre approche comparant le tableau avec la liste de formation que vous pouvez modifier à l'avenir. J'espère que cela vous donnera quelques inspirations.

J'ai utilisé date('N') ce qui donne 1 (for Monday) through 7 (for Sunday): https://www.php.net/manual/en/datetime.format. php

$trainings = [
    '2' => 'Tuesday',
    '4' => 'Thursday',
    '6' => 'Saturday'
];

$today = date('l');
$todayN = date('N');

if (in_array($today, $trainings)) {
    echo 'Today';
} else {
    $nextTraining = array_values($trainings)[0];
    foreach ($trainings as $n => $day) {
        if ($todayN < $n) {
            $nextTraining = $day;
            break;
        }
    }
    echo $nextTraining;
}
0
Jsowa 2 sept. 2020 à 17:57

Parce que d'après la documentation PHP:

l ('L' minuscule ') : une représentation textuelle complète du jour de la semaine

Vous pouvez utiliser:

U : Secondes depuis l'époque Unix (1er janvier 1970 00:00:00 GMT)

Mais dans votre code, vous avez $tuesday < $current qui n'a aucun sens, car si $tuesday est inférieur à $current par rapport au passé, vous devriez utiliser >:

<?php
  $current = date('U', strtotime('now'));
  $tuesday = date('U', strtotime('tuesday this week'));
  $thursday = date('U', strtotime('thursday this week'));
  $saturday = date('U', strtotime('saturday this week'));
  if ($tuesday > $current) {
    echo "Tuesday in the future";
  } else if ($thursday > $current) {
    echo "Thursday in the future";
  } else if ($saturday > $current) {
    echo "Saturday in the future";
  }
 ?>
0
Berto99 2 sept. 2020 à 17:53