begin process at 2010 02 10 17:10:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date / Heure

 > TEMPS ÉCOULÉ (DURÉE) ENTRE 2 DATES SOUS FORME LITTÉRAL NATURELLE

TEMPS ÉCOULÉ (DURÉE) ENTRE 2 DATES SOUS FORME LITTÉRAL NATURELLE


 Information sur la source

Note :
9,33 / 10 - par 3 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Date / Heure Classé sous :date, durée, timestamp, comparaison, comparer Niveau :Débutant Date de création :23/10/2006 Date de mise à jour :24/10/2006 15:31:26 Vu :10 132

Auteur : olid

Ecrire un message privé
Site perso
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

Fonction calculant l'écart entre 2 timestamps Unix et renvoyant un texte littéral naturel sur cette durée.

Ex:
- 1 an et demi
- 2 semaines
- 1 heure et quart

Plus l'écart est faible, plus le texte est précis... Le but est de produire une information rapidement compréhensible par un Homme.

ATTENTION: le premier timestamp Unix  DOIT être le plus vieux.

Source

  • 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_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;
	}



 Historique

24 octobre 2006 15:31:26 :
Précision: il faut indiquer des TimeStamps au format Unix (càd. nbre de secondes depuis le 01/01/1970)

 Sources du même auteur

GÉNÉRER UN LOG AU FORMAT APACHE POUR FAIRE DES STATISTIQUES ...
RÉSUMER UN TEXTE SANS COUPER LES MOTS OU PHRASES
RACCOURCIR INTELLIGEMMENT UNE URL POUR L'AFFICHAGE SUR UNE P...
AFFICHER UNE DATE-HEURE RÉCENTE DANS UN FORMAT NATUREL ET LI...
Source avec Zip MY LAST RSS, CLASSE POUR PARSER ET FUSIONNER PLUSIEURS FEEDS...

 Sources de la même categorie

Source avec Zip Source avec une capture CALENDRIER + AGENDA TRÈS SIMPLE (GERER LES JOURS FÉRIÉS ET L... par mondherclubiste
Source avec Zip Source avec une capture CALENDRIER DES RÉSERVATIONS EN PHP par mathieubond
Source avec Zip GÉNÉRATEUR DE DATE DANS TOUTES LES LANGUES DU MONDE EN (PHP)... par abdelaziz_info
CALCULER LA PHASE DE LA LUNE - MOON PHASE par CristianCCDB
Source avec Zip Source avec une capture UN CALENDRIER SOUS LA FORME D'UN TABLEAU par d54

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CALENDRIER + AGENDA TRÈS SIMPLE (GERER LES JOURS FÉRIÉS ET L... par mondherclubiste
UNIX TIME CONVERTER (UTC) par tiger222
CALCUL DU TEMPS ÉCOULÉ ENTRE 2 DATES par pagis78
AFFICHER UNE DATE-HEURE RÉCENTE DANS UN FORMAT NATUREL ET LI... par olid
NOMBRE DE JOUR DEPUIS par erce78

Commentaires et avis

Commentaire de chmod777 le 24/10/2006 15:21:39

Bonne source mais apparement j'ai un bug, quelle est le format du timestamp supporté ici? YYYY-DD-MMMM HH:MM:SS ? parceque apparement les timestamps que j'utilise ne sont pas les bons...

sinon bravo, c'est clean!

Commentaire de olid le 24/10/2006 15:26:08

C'est le timestamp Unix ; des secondes écoulés depuis le 01/01/70, bref, comme renvoyé par Date('U')... Et non celui de MySQL

Commentaire de chmod777 le 24/10/2006 15:45:32

ah d'accord, je pouvais pas y arriver, merci!

Commentaire de viki53 le 24/03/2008 08:01:02 10/10

Super source 10/10 :)

Je viens de l'installer sur mon site pour les dernières connexions des membres et les MP et pour l'instant je n'ai pas à m'en plaindre !

Commentaire de AgentSmith le 02/04/2009 22:45:10 10/10

Très bon code, fonctionne très bien... bonne continuation

Commentaire de bibiroot le 21/10/2009 00:40:18

Il y  a bogue au changement de jour
j'ai essayé le script en prenant un timestamp à 23H59
lors du passage à 0H00 le script marque 24 heures
or il n'y a que trois minutes d'écart

Commentaire de bibiroot le 21/10/2009 10:36:07

Enfin je voulais dire que le script exécuté à 0H02 indiquait 24 heures au lieu de 3 minutes désolé pour l'explication incomplète

Commentaire de olid le 22/10/2009 12:40:33

il faut calculer le $ecart dés le début, puis déplacer la derniere section avant les comparaisons par années/mois/jours

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

comparaison date [ par rukiyes ] bonjour,pouvez vous me dire comment faire pour comparer deux dates sachant que j'ai une date que j'obtient par :setlocale(LC_TIME, "fr");&nbsp; &nbsp; comparaison de date [ par loyousse ] bonjour j'ai un petit souci... Je recup&#232;re 2 dates et j'aimerais les comparer pour savoir laquelle est la plus grande. &#231;a parait tr&#232;s convertir date française en timestamp [ par dreaman ] Bjour,j ai une date&nbsp;avec ce format "17/01/2005&nbsp; 16:33:14" et je voudrai la transformer en timestamp. Please, c'est un petit probleme mais il comparer 2 dates [ par 3xodius55 ] bonjour tout le monde, je voudrai savoir comment faire pour comparer deux dates entre elles. dans mon cas, j'ai un emprunt avec une date de retour t comparer une date saisie avec une date mysql [ par cLilie ] Salut,je cherche comment comparer une date saisie au clavier dans une zone de texte et une date provenant de mysql.et aussi j'aimerais pouvoir ajouter Convertir une Date au format Timestamp [ par Touf ] Salut !J'ai un petit pb : j'accède à une Date stockée dans une bdd mysql sous la forme (timestamp) "YmdHis" : 20020608105031J'aimerais l'afficher sous Convertir TimeStamp en date dans un tableau excel [ par dreaman ] Convertir TimeStamp en date dans un tableau excel basic problème avec comparaison de date [ par moha013 ] bonjour . je voudrais faire une comparaison entre une date de seminaire et la date courante. voici ma requ&#232;te: select&nbsp;&nbsp; &nbsp; RefSemi Test de valeurs entre 2 dates [ par mfaraday ] BonjourJe souhaiterai tester si une date se trouve bien entre deux dates butoirs. Ne m'y connaissant que moyennement, je pensais m'orienter vers times 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 &#224; une date


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales