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
- Id_Evenement (auto-increment,clé primaire)
- Debut (soit au format DATE soit un VARCHAR de 10 caractères sous la forme yyy-mm-dd)
- Fin (idem que Debut)
- 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">';}