Page 1 sur 1

Gestion des dates en php

Posté : 21 déc. 2014, 01:38
par michgoarin
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.

Re: Gestion des dates en php

Posté : 21 déc. 2014, 13:40
par yann18
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

Re: Gestion des dates en php

Posté : 21 déc. 2014, 14:33
par @rthur
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.