[RESOLU] Gestion des dates en php

Petit nouveau ! | 8 Messages

21 déc. 2014, 01:38

Bonjour,
Responsable d'un parc automobile je dois créer des alertes d'entretien ou de contrôle. A partir d'une date générée lors de l'achat du véhicule (via un formulaire), j'obtiens une date sous la forme d/m/Y. J'ai éditer un fichier test :
<?php
       $dateDepart = "01/02/2014";
	echo $dateDepart."<br/>";
	//durée à rajouter : 4 ans;
	$duree = 4;
	//la première étape est de transformer cette date en timestamp
	$dateDepartTimestamp = strtotime($dateDepart);
	//on calcule la date de fin
	$dateFin= date("d/m/Y",strtotime("+".$duree."year",$dateDepartTimestamp ));
	echo $dateFin."<br/>";
?>
Voici ce que j'obtiens :
02/01/2014
02/01/2018

Il y a une inversion entre le jour et le mois. J'ai tenté de forcer le format, d'extraire sous différentes formes mais rien à faire.

Auriez vous une solution pour obtenir la bonne échéance ?

D'avance merci.

Mammouth du PHP | 571 Messages

21 déc. 2014, 13:40

bonjour,
faudra transformer la date départ , initialement en format fr(jj/mm/aaaa), en format US(aaaa-mm-dd) pour qu'elle soit reconnue comme une date valide par la fonction strtotime():

       $dateDepart = date_create_from_format( 'd/m/Y', '01/02/2014');
       $dateDepart = date_format(  $dateDepart, 'Y-m-d');

        echo $dateDepart."<br/>";
        //durée à rajouter : 4 ans;
        $duree = 4;
        //la première étape est de transformer cette date en timestamp
        $dateDepartTimestamp = strtotime($dateDepart);
        //on calcule la date de fin
        $dateFin= date("d/m/Y",strtotime("+".$duree."year",$dateDepartTimestamp ));
        echo $dateFin."<br/>";
Une autre alternative(sans convertir la date en timestamp):

       $dateDepart = date_create_from_format( 'd/m/Y', '01/02/2014');
	 $duree = 4;
      $dateDepart->modify( +$duree.'years' );//on ajoute 4 ans à la date 01/02/2014
	$dateDepart = date_format(  $dateDepart, 'd/m/Y');
	echo  $dateDepart,'<br>';// 01/02/2018

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 déc. 2014, 14:33

Pour compléter la réponse de Yann18, voici la liste des formats de date acceptés par strtotime() :
http://php.net/manual/fr/datetime.formats.date.php

Tu y verras que lorsque l'on passe une date sous la forme : 01/12/2014 => PHP ne le traduit pas "à la française" comme le 1er décembre 2014 mais "à l'américaine" comme le 12 janvier 2014.
Ce qui explique le soucis que tu rencontres.
Quand tout le reste a échoué, lisez le mode d'emploi...