Comment soustraire x jours à une date ?

WRInaute passionné
Bonjour,

Je galère pour soustraire x jours à des dates contenue dans une variable.

Code:
$query2 = mysql_query("SELECT date_de_fin FROM INFO ");
 
$ladatedefin1="";
 
while($lafin1 = mysql_fetch_array($query2))
 {
   $ladatedefin1 = $lafin1['date_de_fin'];
   $ladatedefin1.="$date_de_fin";
 
if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})",$ladatedefin1, $regs)) {
// le nombre de jour à soustraire
$nombre_jour = 5;  
$regs[3] = $regs[3]-$nombre_jour;
echo "$regs[1]/$regs[2]/$regs[3]";
 }
Forcément venant de moi, sa marche sans marcher ^^...
Si une des dates contenue dans la boucle est par exemple 2008-12-03 , le résultat me sort 2008/12/-2 au lieu de passer au 11 ieme mois ..

Un petit coup de pouce svp ou un lien vers quoi creuser...
Merci
 
WRInaute impliqué
Salut Tryan,

Tu devrais utiliser des timestamp pour manipuler des durées/dates.

Vois du côté de mktime, notamment.

Tu convertis tes dates en timestamp, tu fais ta soustraction, puis tu fais la conversion inverse (timestamp -> date) pour obtenir la date au format voulu :D

++

supercureuil
 
WRInaute impliqué
Salut,

1) Transforme ta date en timestamp (donc un nombre de secondes depuis le 01/01/1970 00:00:00)
2) Retranche à ce timestamp l'équivalent en secondes d'une journée
3) Repasse ton timestamp en date
 
WRInaute passionné
Merci pour vos réponses :) ,

Voilà ce que j'ai fais, dit moi ce que vous en pensez:
Code:
$query2 = mysql_query("SELECT date_de_fin FROM INFO "); 
  
$ladatedefin1=""; 
  
while($lafin1 = mysql_fetch_array($query2)) 
 { 
   $ladatedefin1 = $lafin1['date_de_fin']; 
   $ladatedefin1.="$date_de_fin"; 
  
//$ladatedefin1 me sort les dates sous le format année/mois/jour

//on convertit les dates en timestamp 
$date_en_timestamp = strtotime($ladatedefin1);

//on soustrait 7 jours soit : 7 jours->24 heures->60 minutes->60secondes
$moins_7_jours = $date_en_timestamp - (7 * 24 * 60 * 60);

//on re convertit le timestamp moins les 7 jours en date
$timestamp_en_date_moins_7_jours = date('Y-m-d', $moins_7_jours);

echo 'Conversion des dates moins 7 jours :'.$timestamp_en_date_moins_7_jours.'<br>';


 }
Cela semble fonctionner mais est ce que sa vous parait correcte .. pas trop bourrin..
merci
 
WRInaute discret
Bonjour,

pourquoi ne pas utiliser directement les fonctions mysql ?

Code:
SELECT DATE_SUB(date_de_fin, INTERVAL 7 DAY) FROM INFO
 
WRInaute passionné
Code:
$exploded = explode("/" , $date_fact); // puis on "explose" cette chaine de caractères en un tableau de chaines de caractères ( filtré par "/" )
$mois = (int) $exploded[1]; // là, on converti le mois en entier (int) 
//puis on retransforme en nombre de secondes "UNIX" le même jour, le mois suivant à 24h, donc en fait, le jour suivant du mois suivant... 
$valid_until = mktime(23, 0, 0, $mois + 1,$exploded[0], $exploded[2]); 
$date_echeance=date("d/m/Y", $valid_until); // enfin, on affiche le résultat */


voila comment ajouter un mois à une date

donc facilement modifiable pour enlever x jours

! attention : la date de départ est au format jj/mm/aaaa
 
Discussions similaires
Haut