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


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
Auteur

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.

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.

gefur
Auteur

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
Auteur

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
Auteur

Help ? Une idée svp ?