Afficher une date relative (en français)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 748 fois - Téléchargée 16 fois

Contenu du snippet

string afficherDateRelative(int $timestamp);

// Procède au calcul de différence entre le timestamp actuel et le timestamp $timestamp puis retourne une chaine de caractère.

Cette modeste fonction retournera la date relative de cette façon :

'Il y a 32 secondes' (si moins d'une minute)
'Il y a 10 minutes' et 12 secondes (si moins d'une heure)
'Il y a 4 heures et 44 minutes' (si moins d'un jour)
'Il y a 2 jours et 12 heures' (si moins d'une semaine).

Sinon, il affichera la date comme suit :

'Le 26 Décembre' (si dans l'année courante)
'Le 13 Janvier 2007' (dans les autres cas)

Pour l'utiliser, insérez tout simplement le timestamp en attribut.

Elle est très simple à modifier, niveau débutant. Elle fonctionne par balayage, donc pas de calculs vertigineux et plus facile à s'y retrouver (peut être au dépends de la performance).

Elle va tester les conditions (minutes, heures, jours, secondes) une par une, et finit par retourner le résultat de son balayage.

Bonne chance !

Source / Exemple :


<?php

function afficherDateRelative($date) { // Affiche la date relative en jours/heures/minutes (methode par balayage);
	
	// Initialisation
	
	$secondes 	= time() - $date; $secondes>1 ? $secondes .= ' secondes' : $secondes .= ' seconde';
	$minutes	= '';
	$heures		= '';
	$jours		= '';
	
	$dateRelative   = 'Il y a '. $secondes;
	
	// Début du balayage
	
	if ($secondes > 60) { // S'il y a plus d'une minute
		
		$minutes 	= floor($secondes/60) ; $minutes>1 ? $minutes .= ' minutes' : $minutes .= ' minute';
		$secondes 	= floor($secondes%60) ; $secondes>1 ? $secondes .= ' secondes' : $secondes .= ' seconde';
		
		$dateRelative   = 'Il y a '. $minutes .' et '. $secondes;
	}
	
	if ($minutes > 60) { // S'il y a plus d'une heure
	
		$heures		= floor($minutes/60) ; $heures>1 ? $heures .= ' heures' : $heures .= ' heure';
		$minutes	= floor($minutes%60) ; $minutes>1 ? $minutes .= ' minutes' : $minutes .= ' minute';
		
		$dateRelative   = 'Il y a '. $heures .' et '. $minutes;
	}
	
	if ($heures > 24) { // S'il y a plus d'un jour
	
		$jours		= floor($heures/24) ; $jours>1 ? $jours .= ' jours' : $jours .= ' jour';
		$heures		= floor($heures%24) ; $heures>1 ? $heures .= ' heures' : $heures .= ' heure';
		
		$dateRelative = 'Il y a '. $jours .' et '. $heures;
	}
	
	if ($jours > 7) { // S'il y a plus d'une semaine, on affiche la date normale
	
			$mois	    = date("m",$date)-1;
			$calendrier = array('janvier','février','mars','avril','mai','juin','juillet','aout','septembre','octobre','novembre','décembre');
		
		$jour 		= date("j",$date);
		$mois		= $calendrier[$mois];
		date("Y",$date) != date("Y") ? $annee = date("Y",$date) : $annee = '';
		
		$dateRelative   = 'Le '. $jour .' '. $mois .' '. $annee;
		
		}
	
	return $dateRelative;
	
}

?>

Conclusion :


J'ai écrit cette fonction pour sa simplicité et pour mes besoins propres. J'en ai profité pour en faire quelque chose de simple à comprendre et pouvant être adapté à tous les besoins.

Si vous avez une question, n'hésitez pas !

A bientôt.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
8
Date d'inscription
lundi 15 décembre 2008
Statut
Membre
Dernière intervention
12 janvier 2009

Pour répondre à Petifa, c'était bien volontaire de procéder de cette façon, pour rendre une certaine 'clareté' au niveau de la relecture, la modification et de la compréhension (l'homme maitrise bien la notion de 60*60*24*7 et non pas l'inverse !!). J'ai bien expliqué dans la description que c'était le but du choix de cet algorythme.

Merci

Mountainmagazin : Effectivement, un oubli de ma part (ou plutôt je me suis emmêlé les pinceaux...). L'erreur est corrigée et se trouve sur cette ligne :
date("Y",$date) !date("Y") ? $annee date("Y",$date) : $annee = '';

au lieu de :
date("Y",$date) !date("Y") ? $annee date("Y") : $annee = '';

Merci à tous
Messages postés
215
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
10 mars 2014

Slt,
jme demandais si tu ne te prenais pas un peu la tête pour rien, tu ne peux pas plutot faire une différence avec les deux dates et après tu test la différence et si c'est supérieur à certains seuils tu effectues des traitement.

Sinon $dateRelative est initialisé et peut être changé plusieurs fois, pour les secondes puis les minutes puis les heures ...
sinon c pas mal :)
Messages postés
6
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
29 décembre 2008

Salut,

Bonne idée ta source, mais elle a un souci je crois. Sauf erreur de ma part, tout fonctionne nickel, sauf quand la date d'enregistrement d'un membre par exemple est antérieure à l'année en cours. Dans ce cas la date affichée est la bonne, mais l'année est erronée puisque la fonction affiche comme date l'année en cours.

Je sais pas si je suis clair. Un client enregistré le 21 janvier 2006, la fonction affiche le 21 janvier 2008.

Je mets 7 car l'idée est bonne, mais à moins que ce soit moi qui plane, il y a un souci à ce niveau.
Messages postés
8
Date d'inscription
lundi 15 décembre 2008
Statut
Membre
Dernière intervention
12 janvier 2009

Merci Spoonisback !

Soit dit en passant, je rajoute la gestion du singulier/pluriel, la reflexion m'est venu de "facebook" qui eux, affichent "Envoyé il y a 1 heure(s)"

Bon, eux ne se mouillent pas trop... Mais dans mon cas c'était un oubli grossier. J'ai visé plus haut histoire de me faire pardonner cette erreur : il sera désormais affiché "Il y a 1 heure et 2 minutes" au lieu de "Il y a 1 heures et 2 minutes".

Toutes mes excuses.
Messages postés
72
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
5 février 2010

Je viens de tester, très bon fonctionnement, je n'avais pas penser à faire une fonction comme ça, mais now, je la trouve intéressante.

Je met 9/10 car un code parfait n'existe pas ^^
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.