Connaitre temps entre deux timstamps (fonction évoluée)

Avatar du membre
Mammouth du PHP | 1564 Messages

20 janv. 2013, 12:24

Voici une de mes fonction qui permet de savoir combien de temps s'est passé depuis une date précise.

on peut lui indiquer une date STR ou un timstamp:
désolé pour le si peu de commentaire
<?php
function temps_ecoule($date,$type) {
	if($type == "timestamp") {
		$date2 = $date; // depuis cette date
	} elseif($type == "date") {
		$date2 = strtotime($date); // depuis cette date
	} else {
		return "Non reconnu";
	}
	$Ecart = time()-$date2;
	$Annees = date('Y',$Ecart)-1970;
	$Mois = date('m',$Ecart)-1;
	$Jours = date('d',$Ecart)-1;
	$Heures = date('H',$Ecart)-1;
	$Minutes = date('i',$Ecart);
	$Secondes = date('s',$Ecart);
	$echo_annee = "";
	$echo_mois = "";
	$echo_jour = "";
	$echo_heure = "";
	$echo_minute = "";
	$return = "";
	// ########  ANNEE ########
	if($Annees > 0) {
		$echo_annee = $Annees." Ans";
	}
	// ########  MOIS ########
	if($Mois > 0) {
		$return = ($echo_annee != "" ? $echo_annee." et ".($Mois)." Mois " : $Mois." Mois ");
	}
	// ########  JOUR ########
	if($Jours > 0) {
		$echo_jour = $Jours." Jour".($Jours > 1 ? "s" : "");
		if(!empty($echo_annee) OR !empty($echo_mois)) {
			$return = $return.$echo_mois." et ".$echo_jour;
		} else {
			$return = $return.$echo_mois.$echo_jour;
		}
	}
	// ########  HEURE ########
	if($Heures > 0) {
		$echo_heure = $Heures." Heure".($Heures > 1 ? "s" : "");
		if(!empty($echo_annee) OR !empty($echo_mois) OR !empty($echo_jour)) {
			$return = $echo_annee.$echo_mois.$echo_jour." et ".$echo_heure;
		} else {
			$return = $echo_annee.$echo_mois.$echo_jour.$echo_heure;
		}
	}
	// ########  MINUTE ET SECONDE ########
	$virgule_annee = "";
	$virgule_mois = "";
	$virgule_jour = "";
	if($Minutes > 0) { // si le nombre de minutes est plus grand que 0, on les affiche, sinon on affiche les secondes
		$echo_minute = " et ".round($Minutes)." Minute".($Minutes > 1 ? "s" : "");
	} else {
		$echo_minute = ($Secondes > 0 ? " et ".round($Secondes)." Seconde".($Secondes > 1 ? "s" : "") : "");
	}
	if(!empty($echo_annee) OR !empty($echo_mois) OR !empty($echo_jour) OR !empty($echo_heure)) {
		if(!empty($echo_annee)) {
			if(!empty($echo_mois) OR !empty($echo_jour) OR !empty($echo_heure)) {
				$virgule_annee = ", ";
			}
		}
		if(!empty($echo_mois)) {
			if(!empty($echo_jour) OR !empty($echo_heure)) {
				$virgule_mois = ", ";
			}
		}
		if(!empty($echo_jour)) {
			if(!empty($echo_heure)) {
				$virgule_jour = ", ";
			}
		}
	}
	$return = $echo_annee.$virgule_annee.$echo_mois.$virgule_mois.$echo_jour.$virgule_jour.$echo_heure.$echo_minute;
	return "Il y a ".$return;
}

Eléphant du PHP | 120 Messages

20 janv. 2013, 17:19

Cela existe déjà (en mieux) :
http://be1.php.net/manual/fr/datetime.diff.php

Avatar du membre
Mammouth du PHP | 1564 Messages

20 janv. 2013, 21:00

En mieux? pas possible :mrgreen: