Vérifier si la date du jour est incluse dans une période

But : comparer des dates sous le format mois-jour avec la date en cours (aujourd'hui). Retrouver une donnée correspondante à la date en cours dans une période déterminée. Par exemple, une image différente sera affichée suivant une période déterminée. La date du jour sert à déterminer l'enregistrement qui sera pris en compte

Une table MySQL nommée t_evenements avec 4 champs

  1. Id_Evenement (auto-increment,clé primaire)
  2. Debut (soit au format DATE soit un VARCHAR de 10 caractères sous la forme yyy-mm-dd)
  3. Fin (idem que Debut)
  4. Url (un VARCHAR, disons de 100 caractères, c'est un lien relatif pointant une image

Généralités

setlocale(LC_TIME, 'fr_FR');
date_default_timezone_set('Europe/Paris');
echo utf8_encode(strftime('%A %d %B %Y, %H:%M')); //Affiche la date en cours, par exemple : jeudi 29 avril 2021, 13:14
echo '<br>';
echo 'l\' année est '.date("Y"); // Affiche l'année en cours, par exemple : l' année est 2021
echo '<br>';
echo 'le mois est '.date("m"); // Affiche le mois en cours, par exemple :le mois est 04 
echo '<br>';
echo 'le jour est '.date("d"); // Affiche le jour en cours, par exemple le jour est 29
echo '<br>';

1ère Méthode : Modifier toutes les années encodées dans les champs "Debut" et "Fin" (au format DATE) dans une table "t_evenements" par l'année en cours. Exemple 2020/04/29 deviendra 2021/04/29 
NB : ce qui est en remarque permet de tester le code en cours de développement

$req = 'SELECT * FROM t_evenements';
if(!$retour = $db->query($req)){die('Il y a une erreur dans la requête [' . $db->error . ']');}
 while($donnees = $retour->fetch_assoc()) 
 {
   // $id = $donnees['Id_Evenement'];
   // echo $id;
   // echo '<br>';
   $nouveau_debut =  date("Y").substr($donnees['Debut'],-6); // Concaténation, le -6 permet de ne pas utiliser l' "ancienne" année
   // echo $nouveau_debut;
   // echo '<br>';
   $nouvelle_fin = date("Y").substr($donnees['Fin'],-6);
   // echo $nouvelle_fin;
   // echo '<br>';
   $sql = 'UPDATE t_evenements SET debut = "'.$nouveau_debut.'", fin = "'.$nouvelle_fin.'" WHERE Id_Evenement = "'.$id.'"';
   $res = $db -> query($sql);
 }

On peut ensuite rechercher un enregistrement qui correspond à une date comprise entre Debut et Fin soit deux champs au format DATE

$Recherche = date("Y").'-'.date("m").'-'.date("d");
// echo $Recherche;
// echo '<br>';
$req = 'SELECT * FROM t_evenements WHERE "'.$Recherche.'" BETWEEN Debut AND Fin';
if(!$retour = $db->query($req)){die('Il y a une erreur dans la requête [' . $db->error . ']');}
// echo mysqli_num_rows($retour); vérifie si la requête a au moins renvoyé 1 enregistrement
// echo '<br>';
while($donnees = $retour->fetch_assoc()) /* On fait une boucle pour lister les news. */
 {
  echo '<img src="'.$donnees['Url'].'">';
 }
if(mysqli_num_rows($retour) == 0) {echo '<img src="../photos/wayne.jpg">';}

2ème Méthode : On peut aussi arriver au même résultat sans se préoccuper de l'année. Néanmoins, les champs Debut et Fin reste au format DATE aaaa-mm-dd ou un VARCHAR de 10 caractères sous la même forme. Attention, pour mes tests, j'utilise ici une seconde table nommée t_events car les champs Debut et Fin sont de type VARCHAR

$req = 'SELECT * FROM `t_events` WHERE DATE_FORMAT(now(),"%m%d") BETWEEN DATE_FORMAT(Debut,"%m%d") AND DATE_FORMAT(Fin,"%m%d")  ';
if(!$retour = $db->query($req)){die('Il y a une erreur dans la requête [' . $db->error . ']');}
// echo mysqli_num_rows($retour);
// echo '<br>';
 while($donnees = $retour->fetch_assoc()) /* On fait une boucle pour lister les news. */
 {
   echo '<img src="'.$donnees['Url'].'">';
 }
if(mysqli_num_rows($retour) == 0) {echo '<img src="../photos/wayne.jpg">';}