(fonction maison) affiche le temps écoulé depuis une date

Eléphant du PHP | 447 Messages

11 oct. 2011, 22:01

Bonjour,

voici une fonction réaliser par moi même qui affiche le temps écouler en année, mois, jours, heure, minutes et secondes

Bien évidement, le mois se met dès que le nbr de jour dépasse 30 ou 31, idem pour le mois, si ça dépasse 12 mois, l'année se met


voici la fonction:
<?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";
		exit();
	}
	$date1 = date("U"); // à la date actuelle
	$return = "";
	// ########  ANNEE ########
	if((date('Y',$date1 - $date2)-1970) > 0) {
		if((date('Y',$date1 - $date2)-1970) > 1) {
			$echo_annee = (date('Y',$date1 - $date2)-1970)." Anneés";
			$return = $echo_annee.", ";
		} else {
			$echo_annee = (date('Y',$date1 - $date2)-1970)." Année";
			$return = $echo_annee.", ";
		}
	} else {
		$echo_annee = "";
		$return = $return;
	}
	// ########  MOIS ########
	if((date('m',$date1 - $date2)-1) > 0) {
		$echo_mois = (date('m',$date1 - $date2)-1)." Mois ";
		if(!empty($echo_annee)) {
			$return = $echo_annee." et ".$echo_mois;
		} else {
			$return = $echo_mois;
		}
	} else {
		$echo_mois = "";
		$return = $return;
	}
	// ########  JOUR ########
	if((date('d',$date1 - $date2)-1) > 0) {
		if((date('d',$date1 - $date2)-1) > 1) {
			$echo_jour = (date('d',$date1 - $date2)-1)." Jours";
			if(!empty($echo_annee) OR !empty($echo_mois)) {
				$return = $return.$echo_mois." et ".$echo_jour;
			} else {
				$return = $return.$echo_mois.$echo_jour;
			}
		} else {
			$echo_jour = (date('d',$date1 - $date2)-1)." Jour";
			if(!empty($echo_annee) OR !empty($echo_mois)) {
				$return = $return.$echo_mois." et ".$echo_jour;
			} else {
				$return = $return.$echo_mois.$echo_jour;
			}
		}
	} else {
		$echo_jour = "";
		$return = $return;
	}
	// ########  HEURE ########
	if((date('H',$date1 - $date2)-1) > 0) {
		if((date('H',$date1 - $date2)-1) > 1) {
			$echo_heure = (date('H',$date1 - $date2)-1)." Heures";
			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;
			}
		} else {
			$echo_heure = (date('H',$date1 - $date2)-1)." Heure";
			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;
			}
		}
	} else {
		$echo_heure = "";
		$return = $return;
	}
	// ########  MINUTE ET SECONDE ########
	$virgule_annee = "";
	$virgule_mois = "";
	$virgule_jour = "";
	if(date('i',$date1 - $date2) > 0) {
		if(date('i',$date1 - $date2) > 1) {
			$echo_minute = round(date('i',$date1 - $date2))." Minutes";
			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." et ".$echo_minute;
			} else {
				$return = $echo_annee.$virgule_annee.$echo_mois.$virgule_mois.$echo_jour.$virgule_jour.$echo_heure.$echo_minute;
			}
		} else {
			$echo_minute = round(date('i',$date1 - $date2))." Minute";
			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." et ".$echo_minute;
			} else {
				$return = $echo_annee.$virgule_annee.$echo_mois.$virgule_mois.$echo_jour.$virgule_jour.$echo_heure.$echo_minute;
			}
		}
	} else {
		if(date('s',$date1 - $date2) > 1) {
			$echo_minute = round(date('s',$date1 - $date2))." Secondes";
			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." et ".$echo_minute;
			} else {
				$return = $echo_annee.$virgule_annee.$echo_mois.$virgule_mois.$echo_jour.$virgule_jour.$echo_heure.$echo_minute;
			}
		} else {
			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." et ".$echo_minute;
			} else {
				$return = $echo_annee.$virgule_annee.$echo_mois.$virgule_mois.$echo_jour.$virgule_jour.$echo_heure.$echo_minute;
			}
		}
	}
	return "Il y a ".$return;
}
echo '<pre>';

$date = "1284346290";
echo temps_ecoule($date,"timestamp")."\n"; // timestamp ou date

$date = date('U')-9; // temps actuel, moins 9 secondes
echo temps_ecoule($date,"timestamp")."\n"; // affiche: Il y a 9 Secondes

$date = "13-04-2010 4:00";
echo temps_ecoule($date,"date")."\n";

$date = "13-04-2010 4:00";
echo temps_ecoule($date,"dat")."\n"; // Affiche: Non reconnu
echo '</pre>';
?>
C'est noël avant l'heure :mrgreen:
Cadeau !

Avatar du membre
ViPHP
xTG
ViPHP | 7330 Messages

12 oct. 2011, 09:31

Sympatoche, mais ça manque cruellement de commentaires. :)

Eléphant du PHP | 447 Messages

12 oct. 2011, 10:08

Merci pour le comm, tu n'est pas la seul personne à m'avoir dit que mes script manquais de commentaire, moi et les comm ça fait deux (j'en vois pas l'intérêt sur mes script en fait :wink: )

Bonne journée

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13234 Messages

12 oct. 2011, 10:10

Merci pour le comm, tu n'est pas la seul personne à m'avoir dit que mes script manquais de commentaire, moi et les comm ça fait deux (j'en vois pas l'intérêt sur mes script en fait :wink: )
1er intérêt : tu partages ta fonction, il est donc nécessaire que ceux qui veulent l'utiliser puisse la comprendre. ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
ViPHP
xTG
ViPHP | 7330 Messages

12 oct. 2011, 11:28

Ta fonction est loin d'être petite... Si un jour quelqu'un doit la modifier cela va être un poil galère de tout relire et de comprendre comment elle fonctionne. :roll:
A la limite cela ne va être que 10minutes d'études, mais imagines sur un projet de plus de 100 000 lignes de code ? Le gars qui me pond un projet de la sorte sans commentaires je l'immole sur sa chaise moi...

ViPHP
ViPHP | 5462 Messages

12 oct. 2011, 11:46

ta fonction ne prend pas en compte le chargement d'heure, sinon pour le reste y'a date_diff

Eléphant du PHP | 447 Messages

12 oct. 2011, 12:44

c'est pas faux! // réponse à zeus et xTG ^^

@stealth35: date_diff n'est pas seulement si on utilise PDO ?

Eléphanteau du PHP | 44 Messages

12 oct. 2011, 13:31

Elle fait quoi cette fonction au juste ?

J'ai rien capté du tout à son utilité éventuelle.
En tout cas c'est codé comme un cochon.
return "Non reconnu";
                exit();
un exit ici, alors que ce genre d'erreur ne nécessite aucunement l'arrêt brutal du script, surtout après un return...

$return = $return;
:mrgreen:

Je me suis arrêté là.

ViPHP
ViPHP | 5462 Messages

12 oct. 2011, 13:43

@stealth35: date_diff n'est pas seulement si on utilise PDO ?
non aucun rapport avec PDO
http://www.php.net/manual/fr/datetime.diff.php

Eléphant du PHP | 447 Messages

12 oct. 2011, 17:55

ah b merci pour le travail de cochon :mrgreen:

j'essaierais de m'appliquer la prochaine fois, promis :wink: