Niveau
..........
En rapport...

Écart entre deux date

Php nous offres des possibilités de calcul de date infini, notamment grâce a mktime.
Ici nous allons calculer l'écart en année, mois et jour entre deux date.

Notions essentielles

Il y a deux notions essentielles à retenir :

  • La meilleure façon de gérer les dates est le timestamps. C'est la façon la plus précise.
    Le timestamps est un nombre entier qui représente le nombre de secondes écoulées depuis le début de l'époque Unix.
  • Le début de l'époque Unix est le 01/01/1970. Cette date est importante si on doit être une période entre 2 date (ce que l'on va faire juste après).

Fonctions

php
function NbJour($debut="15/06/2006",$fin=null) {
	/*Si aucune date de fin est spécifié, on prend la date du jour*/
	if ($fin==null)
		$fin=date('d/m/Y');
	/*on "découpe" les dates de façon à obtenir un tableau de 3 lignes : 0=>jours, 1=>mois, 2=>années*/
	$debut=explode("/",$debut);
	$fin=explode("/",$fin);
	/*A partir de ce tableau, on reconstitue le timestamp grâce à la fonction mktime*/
	$debut=mktime(0,0,0,$debut[1],$debut[0],$debut[2]);
	$fin=mktime(0,0,0,$fin[1],$fin[0],$fin[2]);
	/*On soustrait les deux dates et on obtient le nombre de secondes écoulé*/
	$d=$fin-$debut;
	/*Il ne reste plus qu'à calculer le nombre d'années, mois et jours écoulé*/
	return array("ans"=>date('Y',$d)-1970,"mois"=>date('m',$d)-1,"jours"=>date('d',$d)-1);
}

La fonction en elle-même est relativement simple.
Attardons nous tous de même sur la dernière ligne :

php
return array("ans"=>date('Y',$d)-1970,"mois"=>date('m',$d)-1,"jours"=>date('d',$d)-1);

Que fait-on exactement ici ?
Grâce à date('Y',$d), date('m',$d) et date('d',$d) on va respectivement extraire une année, un mois et un jour calculé à partir du nombre de seconde écoulé.
Ensuite pour que ce nombre soit représentatif on le soustrait au point de départ de l'époque Unix.

En détail

Si nous avions trouvé 86400 secondé écoulé entre les deux date.
Voilà ce que nous aurions obtenu :

  • date('Y',$d) = 1970
  • date('m',$d) = 1
  • date('d',$d) = 2

Et c'est normal puisque la fonction date utilise aussi le point de départ de l'époque Unix pour concevoir une date. Donc la date qui correspond au nombre de seconde 86400 est bien le 02/01/1970.
En soustrayant le point de départ de l'époque Unix a cette date on obtient :

  • 1970-1970 = 0
  • 1 - 1 = 0
  • 2 - 1 = 1

Donc, pour 86400 seconde écoulé on calcule 1 jours, 0 mois et 0 année.

Retour

La fonction renvois un tableaux de 3 lignes :

php
Array
(
    [ans] => 24
    [mois] => 3
    [jours] => 8
)


16/06/2006 09:57 -

iDo –