Récupérer des éléments sql d'une requête comprise entre deux dates

Par gefur, il y a 7 ans


Bonjour,

Je souhaiterais afficher certaines dates présentes dans ma base de donnée MySql comprises entre tel date et tel date.
Il faudrait qu'on autorise l'affichage si start_date et end_date soit égaux à la date du jour mais également afficher l'objet dans une période donnée entre X date et Y date.

Exemple : Nous sommes le 11/05/2019
id = 1
name = test
start_date = 11/05/2019
end_date = 13/05/2019

Donc je souhaiterais que ma date s'affiche du 11 au 13 mai 2019.

La strucutre de la bdd comprend :

+-------------++---------------------------++----------------------------------++----------------------------------++----------------------------------+
| id | name | start_date | end_date | created_at |
| 1 | test | 2019-05-11 | 2019-05-13 | 2019-05-11 00:00:00 |
+-------------++---------------------------++----------------------------------++----------------------------------++----------------------------------+

J'ai essayé ce code mais il présente cependant quelques problèmes d'affichage.

$today_date = date("Y-m-d"); $recup = $bdd->prepare('SELECT * FROM absences WHERE id_user = :iduser AND start_date >= :dateactuelle AND end_date <= :dateactuelle ORDER BY id DESC'); $recup->execute(array( 'iduser' => $_SESSSION['id'], 'dateactuelle' => $today_date ));

Pourriez-vous m'aider ?

Un Grand merci.

6 réponses

Lartak, il y a 7 ans

Je l'avais bien compris que Y correspondait au champ end_date, mais ce que je te disais c'était concernant le nombre de jours étant donné que tu parlais de période, il faut bien définir un nombre de jours à partir de la date actuelle pour la condition sur la date de fin.

Lartak, il y a 7 ans

Bonjour.
Par exemple :

SELECT * FROM absences WHERE id_user = :iduser AND (start_date = :dateactuelle AND end_date = :dateactuelle) OR (start_date >= :dateactuelle) ORDER BY id DESC

Par contre ne sachant pas à quoi correspond exactement Y date, je ne me suis pas lancé dans du subjectif pour mon exemple.

gefur, il y a 7 ans

Bonjour @Lartak,

Merci de votre réponse !!

Y date correspond à la date de fin de l'event
X correspond au début.

Exemple :
X = 11/05/2019
Y = 14/05/2019

Votre code fonctionne sauf au niveau des périodes entre X et Y que l'événement ne s'affiche pas...

J'aimerais afficher l'event pendant ses deux périodes en regardant si les dates de la base de donnée (start_date & end_date) correspondent à la date du jour.

Je vous remercie de votre dévouement et de votre aide.

gefur, il y a 7 ans

Il faudrait juste une fonction qui permettra de calculer l'interval des deux dates pour ensuite les affichers jusqu'à la end_date.
Le problème esr que je ne sais pas comment procéder... Y-a t-il pas une fonction qui permettrais de calculer le nombre de jour entre start_date et end_date ?

Merci !

gefur, il y a 7 ans

J'ai trouvé quelques solutions sur internet !

<?php #### ## Solution 1 #### $date1 = new DateTime("2010-07-06"); $date2 = new DateTime("2010-07-09"); $diff = $date2->diff($date1)->format("%a"); echo $diff; #### ## Solution 2 #### $debut = strtotime('2010-01-25'); $fin = strtotime('2010-02-20'); $dif = ceil(abs($fin - $debut) / 86400); echo $dif; #### ## Solution 3 #### $date1 = "01-05-2010"; //date fr le 01 mai 2010 $date2 = "01-10-2010"; // date fr le 01 octobre 2010 // On transforme les 2 dates en timestamp $date3 = strtotime($date1); $date4 = strtotime($date2); // On récupère la différence de timestamp entre les 2 précédents $nbJoursTimestamp = $date4 - $date3; // ** Pour convertir le timestamp (exprimé en secondes) en jours ** // On sait que 1 heure = 60 secondes * 60 minutes et que 1 jour = 24 heures donc : $nbJours = $nbJoursTimestamp/86400; // 86 400 = 60*60*24 echo "Nombre de jours : ".$nbJours;// dans mon exemple : Nombre de jours : 153 #### ## Solution 4 #### $datetime1 = new DateTime("2010-06-20"); $datetime2 = new DateTime("2011-06-22"); $difference = $datetime1->diff($datetime2); echo 'Difference: '.$difference->y.' Annees, ' .$difference->m.' Mois, ' .$difference->d.' Jours'; ?>
gefur, il y a 7 ans

Help ? Une idée svp ?