Accueil > > > AFFICHER UNE DATE-HEURE RÉCENTE DANS UN FORMAT NATUREL ET LITTERAIRE PLUS COMPRÉHENSIBLE
AFFICHER UNE DATE-HEURE RÉCENTE DANS UN FORMAT NATUREL ET LITTERAIRE PLUS COMPRÉHENSIBLE
Information sur la source
Description
Ces fonctions permettent de mettre en évidence la proximité d'un événement en transformant un timestamp UNIX en un texte trés court. Exemples d'expressions produites (et la période concernée entre parenthèse): - "maintenant" (si moins de 5 minutes) - "il y a 8 minutes" (si moins d'une heure) - "ce matin" (meme jour) - "hier midi" (la veille) - "vendredi matin" (7 derniers jours) Puis, la date est affichée normalement pour des dates plus anciennes... Sauf celles de l'année en cours qui comportent pas l'année. L'idée a été inspirée de Google News qui affiche la durée de publication (en minutes ou heures) d'une annonce récente, mais en étendant le principe aux jours précèdant. PARADOXE: bien que la date affichée soit moins précises sur le moment où elle s'est déroulée, les internautes sont plus réactifs à ces expressions litteraires pour percevoir si un événement est récent ou ancien :o.
Source
- function timestamp2naturaltime($timestamp)
- {
- $ecart = ceil(date('U') - $timestamp);
-
- if ($ecart <= 7000)
- {
- $txt = 'il y a '.date_elapsednaturaltime($timestamp);
- }
- else if (($ecart <= 86400) AND (date('d',$timestamp) == date('d')))
- {
- // Aujourd'hui
- if (date('a',$timestamp) == 'am')
- {
- if (date('H',$timestamp) <= 5)
- {
- $txt = 'cette nuit';
- }
- else
- {
- $txt = 'ce matin, à '.date('H',$timestamp).' heures';
- }
- }
- else
- {
- if (date('H',$timestamp) <= 13)
- {
- $txt = 'ce midi';
- }
- else if (date('H',$timestamp) <= 17)
- {
- $txt = 'cette aprés-midi, à '.date('H',$timestamp).' heures';
- }
- else if (date('H',$timestamp) <= 21)
- {
- $txt = 'ce soir';
- }
- else
- {
- $txt = 'cette nuit';
- }
- }
- }
- else if (($ecart <= 172800) AND (date('d',$timestamp) == (date('d')-1)))
- {
- // Hier
- if (date('a',$timestamp) == 'am')
- {
- if (date('H',$timestamp) <= 5)
- {
- $txt = 'hier soir';
- }
- else
- {
- $txt = 'hier matin, à '.date('H',$timestamp).' heures';
- }
- }
- else
- {
- if (date('H',$timestamp) <= 13)
- {
- $txt = 'hier midi';
- }
- else if (date('H',$timestamp) <= 17)
- {
- $txt = 'hier aprés-midi, à '.date('H',$timestamp).' heures';
- }
- else
- {
- $txt = 'hier soir';
- }
- }
- }
- else if ($ecart <= 518400)
- {
- if (date('a',$timestamp) == 'am')
- {
- if (date('H',$timestamp) <= 5)
- {
- $txt = date_nombre2jour(date('w',$timestamp)).' soir';
- }
- else
- {
- $txt = date_nombre2jour(date('w',$timestamp)).' matin';
- }
- }
- else
- {
- if (date('H',$timestamp) <= 13)
- {
- $txt = date_nombre2jour(date('w',$timestamp)).' midi';
- }
- else if (date('H',$timestamp) <= 17)
- {
- $txt = date_nombre2jour(date('w',$timestamp)).' aprés-midi';
- }
- else
- {
- $txt = date_nombre2jour(date('w',$timestamp)).' soir';
- }
- }
- }
- else if (date('Y',$timestamp) == date('Y'))
- {
- // Cette année
- //$txt = 'le '.date_nombre2jour(date('w',$timestamp)).' '.date('j',$timestamp).' '.date_nombre2mois(date('m',$timestamp));
- $txt = 'il y a '.date_elapsednaturaltime($timestamp);
- }
- else
- {
- //$txt = 'le '.date_nombre2jour(date('w',$timestamp)).' '.date('j',$timestamp).' '.date_nombre2mois(date('m',$timestamp)).' '.date('Y',$timestamp);
- $txt = 'il y a '.date_elapsednaturaltime($timestamp);
- }
-
- return $txt;
- }
-
- function date_elapsednaturaltime($timestamp1,$timestamp2=0)
- {
- if ($timestamp2 == 0)
- {
- $timestamp2 = date('U');
- }
-
- $a = date("Y",$timestamp1);
- $m = date("n",$timestamp1);
- $j = date("j",$timestamp1);
-
- $an = date("Y",$timestamp2) - $a;
- $mois = date("n",$timestamp2) - $m;
- $jour = date("j",$timestamp2) - $j;
-
- // Durée en année, mois, jours.
- if ($jour<0)
- {
- $d2=mktime(0,0,0,date("n")-1,date("j"),date("Y"));
- $diff=date_nbdays4month(date("n",$d2),date("Y",$d2));
- $jour+=$diff;
- $mois--;
- }
-
- if ($mois<0)
- {
- $mois+=12;
- $an--;
- }
-
- $txt = '';
-
- if ($an == 1)
- {
- // Depuis 1 an
- if (($mois >= 6) AND ($mois <= 7))
- {
- $txt.= '1 an et demi';
- }
- else if ($mois >= 11)
- {
- $txt.= '2 ans';
- }
- else if ($mois >= 2)
- {
- $txt.= '1 an, et '.$mois.' mois';
- }
- else
- {
- $txt.= '1 an';
- }
- }
- else if ($an > 1)
- {
- // Depuis plusieurs années
- if ($mois < 5)
- {
- $txt.= $an.' ans';
- }
- else if ($mois <= 8)
- {
- $txt.= $an.' ans et demi';
- }
- else
- {
- $txt.= ($an+1).' ans';
- }
- }
- else if ($mois >= 1)
- {
- // Depuis plusieurs mois
- if ($jour < 16)
- {
- $txt.= $mois.' mois';
- }
- else if (($jour >= 14) AND ($jour <= 16))
- {
- $txt.= $mois.' mois et demi';
- }
- else
- {
- $txt.= ($mois+1).' mois';
- }
- }
- else if ($jour >= 1)
- {
- if ($jour == 1)
- {
- $txt.= '24 heures';
- }
- else if ($jour >=29)
- {
- $txt.= '1 mois';
- }
- else if (($jour >=6) AND ($jour <= 8))
- {
- $txt.= '1 semaine';
- }
- else if ($jour >= 16)
- {
- $txt.= ceil($jour/7).' semaines';
- }
- else
- {
- $txt.= $jour.' jours';
- }
- }
- else
- {
- $ecart = ceil(date('U',$timestamp2)-date('U',$timestamp1));
- if (($ecart <= 65) AND ($ecart >= 58))
- {
- $txt ='1 minute';
- }
- else if ($ecart <= 60)
- {
- $txt = $ecart.' secondes';
- }
- else if (($ecart >= (58 * 60)) AND ($ecart <= (62 * 60)))
- {
- $txt = '1 heure';
- }
- else if ($ecart <= (60 * 60))
- {
- $txt = ceil($ecart/60).' minutes';
- }
- else if (($ecart >= (73 * 60)) AND ($ecart <= (77 * 60)))
- {
- $txt = '1 heure et quart';
- }
- else if (($ecart >= (88 * 60)) AND ($ecart <= (92 * 60)))
- {
- $txt = '1 heure et demi';
- }
- else if ($ecart < (120 * 60))
- {
-
- $txt = '1 heure, et '.ceil(($ecart-(60*60))/60).' minutes';
- }
- else
- {
- $txt = ceil($ecart/(60*60)).' heures';
- }
- }
-
- return $txt;
- }
-
- function date_nbdays4month($month,$year)
- {
- if ($month==2)
- {
- if($year%4) return 28;
- elseif($year%100) return 29;
- elseif($year%1000) return 28;
- else return 29;
- }
- else if (($month==4)||($month==6)||($month==9)||($month==11))
- {
- return 30;
- }
- return 31;
- }
-
- function date_nombre2mois($nombre=1)
- {
- $listemois = array ('janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre');
-
- if (($nombre <= 12) AND ($nombre >= 1))
- {
- $mois = $listemois[($nombre -1)];
- }
-
- return $mois;
- }
-
- function date_nombre2jour($nombre=0)
- {
- $jours = array ('dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi');
-
- if (($nombre <= 6) AND ($nombre >= 0))
- {
- $jour = $jours[$nombre];
- }
-
- return $jour;
- }
-
- function date_timestamp2strdate($timestamp)
- {
- $strdate = date('d',$timestamp).' '.date_nombre2mois(date('m',$timestamp)).' '.date('Y',$timestamp);
-
- return $strdate;
- }
-
- function date_timestamp2strdateheure($timestamp)
- {
- $strdateheure = date_timestamp2strdate($timestamp);
-
- if ((date('H',$timestamp) > 0) OR (date('i',$timestamp) > 0))
- {
- if (date('i',$timestamp) > 0)
- {
- $strdateheure .= ', à '.date('H',$timestamp).' h '.date('i',$timestamp);
- }
- else
- {
- $strdateheure .= ', à '.date('H',$timestamp).' heures';
- }
- }
-
- return $strdateheure;
- }
-
-
function timestamp2naturaltime($timestamp)
{
$ecart = ceil(date('U') - $timestamp);
if ($ecart <= 7000)
{
$txt = 'il y a '.date_elapsednaturaltime($timestamp);
}
else if (($ecart <= 86400) AND (date('d',$timestamp) == date('d')))
{
// Aujourd'hui
if (date('a',$timestamp) == 'am')
{
if (date('H',$timestamp) <= 5)
{
$txt = 'cette nuit';
}
else
{
$txt = 'ce matin, à '.date('H',$timestamp).' heures';
}
}
else
{
if (date('H',$timestamp) <= 13)
{
$txt = 'ce midi';
}
else if (date('H',$timestamp) <= 17)
{
$txt = 'cette aprés-midi, à '.date('H',$timestamp).' heures';
}
else if (date('H',$timestamp) <= 21)
{
$txt = 'ce soir';
}
else
{
$txt = 'cette nuit';
}
}
}
else if (($ecart <= 172800) AND (date('d',$timestamp) == (date('d')-1)))
{
// Hier
if (date('a',$timestamp) == 'am')
{
if (date('H',$timestamp) <= 5)
{
$txt = 'hier soir';
}
else
{
$txt = 'hier matin, à '.date('H',$timestamp).' heures';
}
}
else
{
if (date('H',$timestamp) <= 13)
{
$txt = 'hier midi';
}
else if (date('H',$timestamp) <= 17)
{
$txt = 'hier aprés-midi, à '.date('H',$timestamp).' heures';
}
else
{
$txt = 'hier soir';
}
}
}
else if ($ecart <= 518400)
{
if (date('a',$timestamp) == 'am')
{
if (date('H',$timestamp) <= 5)
{
$txt = date_nombre2jour(date('w',$timestamp)).' soir';
}
else
{
$txt = date_nombre2jour(date('w',$timestamp)).' matin';
}
}
else
{
if (date('H',$timestamp) <= 13)
{
$txt = date_nombre2jour(date('w',$timestamp)).' midi';
}
else if (date('H',$timestamp) <= 17)
{
$txt = date_nombre2jour(date('w',$timestamp)).' aprés-midi';
}
else
{
$txt = date_nombre2jour(date('w',$timestamp)).' soir';
}
}
}
else if (date('Y',$timestamp) == date('Y'))
{
// Cette année
//$txt = 'le '.date_nombre2jour(date('w',$timestamp)).' '.date('j',$timestamp).' '.date_nombre2mois(date('m',$timestamp));
$txt = 'il y a '.date_elapsednaturaltime($timestamp);
}
else
{
//$txt = 'le '.date_nombre2jour(date('w',$timestamp)).' '.date('j',$timestamp).' '.date_nombre2mois(date('m',$timestamp)).' '.date('Y',$timestamp);
$txt = 'il y a '.date_elapsednaturaltime($timestamp);
}
return $txt;
}
function date_elapsednaturaltime($timestamp1,$timestamp2=0)
{
if ($timestamp2 == 0)
{
$timestamp2 = date('U');
}
$a = date("Y",$timestamp1);
$m = date("n",$timestamp1);
$j = date("j",$timestamp1);
$an = date("Y",$timestamp2) - $a;
$mois = date("n",$timestamp2) - $m;
$jour = date("j",$timestamp2) - $j;
// Durée en année, mois, jours.
if ($jour<0)
{
$d2=mktime(0,0,0,date("n")-1,date("j"),date("Y"));
$diff=date_nbdays4month(date("n",$d2),date("Y",$d2));
$jour+=$diff;
$mois--;
}
if ($mois<0)
{
$mois+=12;
$an--;
}
$txt = '';
if ($an == 1)
{
// Depuis 1 an
if (($mois >= 6) AND ($mois <= 7))
{
$txt.= '1 an et demi';
}
else if ($mois >= 11)
{
$txt.= '2 ans';
}
else if ($mois >= 2)
{
$txt.= '1 an, et '.$mois.' mois';
}
else
{
$txt.= '1 an';
}
}
else if ($an > 1)
{
// Depuis plusieurs années
if ($mois < 5)
{
$txt.= $an.' ans';
}
else if ($mois <= 8)
{
$txt.= $an.' ans et demi';
}
else
{
$txt.= ($an+1).' ans';
}
}
else if ($mois >= 1)
{
// Depuis plusieurs mois
if ($jour < 16)
{
$txt.= $mois.' mois';
}
else if (($jour >= 14) AND ($jour <= 16))
{
$txt.= $mois.' mois et demi';
}
else
{
$txt.= ($mois+1).' mois';
}
}
else if ($jour >= 1)
{
if ($jour == 1)
{
$txt.= '24 heures';
}
else if ($jour >=29)
{
$txt.= '1 mois';
}
else if (($jour >=6) AND ($jour <= 8))
{
$txt.= '1 semaine';
}
else if ($jour >= 16)
{
$txt.= ceil($jour/7).' semaines';
}
else
{
$txt.= $jour.' jours';
}
}
else
{
$ecart = ceil(date('U',$timestamp2)-date('U',$timestamp1));
if (($ecart <= 65) AND ($ecart >= 58))
{
$txt ='1 minute';
}
else if ($ecart <= 60)
{
$txt = $ecart.' secondes';
}
else if (($ecart >= (58 * 60)) AND ($ecart <= (62 * 60)))
{
$txt = '1 heure';
}
else if ($ecart <= (60 * 60))
{
$txt = ceil($ecart/60).' minutes';
}
else if (($ecart >= (73 * 60)) AND ($ecart <= (77 * 60)))
{
$txt = '1 heure et quart';
}
else if (($ecart >= (88 * 60)) AND ($ecart <= (92 * 60)))
{
$txt = '1 heure et demi';
}
else if ($ecart < (120 * 60))
{
$txt = '1 heure, et '.ceil(($ecart-(60*60))/60).' minutes';
}
else
{
$txt = ceil($ecart/(60*60)).' heures';
}
}
return $txt;
}
function date_nbdays4month($month,$year)
{
if ($month==2)
{
if($year%4) return 28;
elseif($year%100) return 29;
elseif($year%1000) return 28;
else return 29;
}
else if (($month==4)||($month==6)||($month==9)||($month==11))
{
return 30;
}
return 31;
}
function date_nombre2mois($nombre=1)
{
$listemois = array ('janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre');
if (($nombre <= 12) AND ($nombre >= 1))
{
$mois = $listemois[($nombre -1)];
}
return $mois;
}
function date_nombre2jour($nombre=0)
{
$jours = array ('dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi');
if (($nombre <= 6) AND ($nombre >= 0))
{
$jour = $jours[$nombre];
}
return $jour;
}
function date_timestamp2strdate($timestamp)
{
$strdate = date('d',$timestamp).' '.date_nombre2mois(date('m',$timestamp)).' '.date('Y',$timestamp);
return $strdate;
}
function date_timestamp2strdateheure($timestamp)
{
$strdateheure = date_timestamp2strdate($timestamp);
if ((date('H',$timestamp) > 0) OR (date('i',$timestamp) > 0))
{
if (date('i',$timestamp) > 0)
{
$strdateheure .= ', à '.date('H',$timestamp).' h '.date('i',$timestamp);
}
else
{
$strdateheure .= ', à '.date('H',$timestamp).' heures';
}
}
return $strdateheure;
}
Conclusion
Mon blog: http://360.yahoo.com/olie_ze_kat
Historique
- 07 juin 2006 20:06:06 :
- :o|
- 08 juin 2006 19:16:24 :
- :o|
- 23 octobre 2006 11:36:38 :
- Corrections, et amélioration en intégrant la fonction elapsednaturaltime()
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Recherche aide ....... [ par nagrom_om ]
Salut tout le monde,Je cherche a faire une fonction qui remplit chaque jour (ajout d'informations dans une table) d'une date de debut à une date
Changer le format d'un timestamp [ par ofillion ]
Bonjour à tous, Dans ma base, j'ai un champs timestamp qui enregistre par défaut la date et l'heure du jour lors de l'ajout d'un enregistrement. Elle
Exécuter une page PHP à une date et une heure précise [ par Drazounet ]
Bonjour à tous,Je suis en train de créer un site de vente aux enchères. Sur mon site, un vendeur peut sélectionner la liste de ses acheteurs potentiel
heure et date [ par jamelzzz ]
bonjour,j'ai crée un code qui affiche l'heure automatique.il marche trés bien lorsque on appuie sur actualiser(F5).maintenant au desous de cette c
MySQL et fonction DATE [ par sky727 ]
Bonjour à tous sur le forum, J'ai une BDD sous MySQL avec 3 champs - id - pseudo - date le numéro de séquence (id) s'enregistre bien le pseudo utilis
heure date [ par woresa ]
Bonsoir a tous Je voudrai savoir comment les phpeurs arrivent a afficher l'heure exacte selon les pays des visiteurs. si il y a un tuto veuillez m'
Fonction date() et décalage horaire [ par pouchteck ]
Bonjour, Je suis en train de programmer une partie commentaires en PHP pour mon site, et je voudrais afficher la date et l'heure de post, avec la fonc
Fermeture de session via navigateur : récupérer l'heure et la date [ par Fredbeginner ]
Bonjour à tous,Je développe un site PHP/MYSQL avec une table Logconnection qui récupère l'identifiant du memebre connecté, son IP et sa date / heure d
Incrémenter date et l'heure [ par vincej ]
bonjour,Je cherche à incrémenter la date et l'heure actuelle, dans la base.Voici mon code://////////PHP///////////////////////////////$query = "INSERT
Timestamp / Date [ par Aaron ]
Bonjour, J'aimerais insérer un Timestamp (avec une date dans le futur) dans ma base de données.Je procède comme ceci afin d'avoir la date et l'heure a
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|