PHP - Comparaison de dates

boss183 Messages postés 187 Statut Membre -  
boss183 Messages postés 187 Statut Membre -
Bonjour à tous,

je viens vers vous car je souhaite comparer des dates et je ne vois pas trop comment coder ça. Alors je vous explique :
Je récupère dans une base de donnée la date de début d'un contrat au format aaaa-mm-jj (c'est du varchar) et la durée de ce contrat en mois, je souhaiterais obtenir la date de fin dans le même format, je ne sais pas trop comment faire "l'addition".
De plus, une fois cette date de fin de contrat obtenu, je voudrais pouvoir la "comparer" avec la date d'aujourd'hui et si cette date se situe par exemple dans moins de deux mois j'affiche un message à l'utilisateur.

Pouvez-vous m'aider à coder cela ?

Merci d'avance

A voir également:

2 réponses

chrij Messages postés 124 Statut Membre 49
 
Bonjour,
je n'ai pas de quoi faire du php sous la main pour vérifier si ça fonctionne mais voilà quelques idées pour résoudre le problème :

1.convertir un string en date : https://www.php.net/manual/fr/datetime.createfromformat.php

2. ajouter des mois à une date : https://www.php.net/manual/fr/function.date-add.php

3. comparer les dates : on va comparer les timestamp, il faut donc récupérer celui que l'on vient de calculer : $timestamp = mktime(heures, minutes, secondes, mois, jour, année);
0
boss183 Messages postés 187 Statut Membre 17
 
Voici la solution :

$datedeb = '2011-04-18'; // Date de début, qui provient de la base 
$duree = 6; // Durée du contrat en mois 

// Conversion de la date de début en unix timestamp 
list($y,$m,$d) = explode('-', $datedeb); 
$utdb = mktime(12,0,0,$m,$d,$y); 

// Calcul de la fin du contrat: 
$utdf = strtotime("+".$duree." months", $utdb); 

// On prend la date du jour à 12h, pour être dans le même contexte horaire que le contrat: 
$now = mktime(12, 0, 0, date('m'), date('d'), date('Y')); 

// Comparaison des dates: 
if (strtotime("+2 months", $now) > $utdf) 
{ 
echo "le contrat va bientot se terminer"; 
} 
else 
{ 
echo "le contrat ne se termine pas bientôt"; 
} 
0