begin process at 2012 05 27 18:08:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date / Heure

 > PRETTY DATE

PRETTY DATE


 Information sur la source

Note :
7,67 / 10 - par 3 personnes
7,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Date / Heure Classé sous :date, pretty, formatage, heure Niveau :Débutant Date de création :14/06/2006 Date de mise à jour :15/06/2006 12:54:08 Vu :3 373

Auteur : coockiesch

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

 Description

Pour commencer, l'idée de ce code et son implémentation ne sont pas de moi, il s'agit d'un code d'olid:
http://www.phpcs.com/codes/AFFICHER-DATE-H EURE-RECENTE-DANS-FORMAT-NATUREL-LITTERAIRE_38008. aspx

Je l'ai adapté un petit peu pou en faire un code plus joli (puisqu'il ne voulait pas nous mâcher le boulôt) et pour faire une "gestion multilangue"... Je sais pas si vraiment on peut parler de gestion multilangues car ça ne gère que des langues pas trop compliquées au niveau des dates, si on veut intégrer une langue qui contient des suffixes et des préfxes partout, faudrait faire une fonction à part entière, voilà! :)

Source

  • #################
  • Fichier principal
  • #################
  • <?php
  • function prettyDate( $timestamp, $lang = 'fr' )
  • {
  • include 'lang.php';
  • // si le code langue utilisé n'est pas défini
  • if( !isset( $prettyDateLang[ $lang ] ) )
  • return date( 'd/m/Y H:i:s' );
  • // date
  • $date = explode( '/', date( 'd/m/Y/H', $timestamp ) );
  • $date[4] = $prettyDateLang[ $lang ][ 'jours' ][ date( 'w', $timestamp ) ];
  • // date actuelle
  • $date_day = explode( '/', date( 'd/m/Y', time() ) );
  • $array_search = array();
  • $array_replace = array();
  • // écart entre la date et la date actuelle
  • $ecart = time() - $timestamp;
  • // maitenant
  • if( $ecart <= 300 )
  • $txt = $prettyDateLang[ $lang ][ 'now' ];
  • // récemment --> minutes
  • else if( $ecart < 3000 )
  • {
  • $txt = $prettyDateLang[ $lang ][ 'minutes' ];
  • $array_search[] = '{minutes}';
  • $array_replace[] = ceil( $ecart / 60 );
  • }
  • // il y a une heure
  • else if( $ecart < 7000 )
  • $txt = $prettyDateLang[ $lang ][ 'heure' ];
  • else if( $ecart < 10800 )
  • {
  • $txt = $prettyDateLang[ $lang ][ 'heures' ];
  • $array_search[] = '{heures}';
  • $array_replace[] = round( $ecart / 3600, 0 );
  • }
  • // aujourd'hui ou hier
  • else if( $ecart < 86400 && $date[0] == $date_day[0] )
  • {
  • // le matin
  • if( date( 'a', $timestamp ) == 'am' )
  • {
  • if( $date[3] < 5 )
  • $txt = $prettyDateLang[ $lang ][ 'cette_nuit' ];
  • else
  • $txt = $prettyDateLang[ $lang ][ 'ce_matin' ];
  • }
  • // pas le matin
  • else
  • {
  • if( $date[3] < 13 )
  • $txt = $prettyDateLang[ $lang ][ 'ce_midi' ];
  • else if( $date[3] < 17 )
  • $txt = $prettyDateLang[ $lang ][ 'cette_am' ];
  • else if( $date[3] < 21 )
  • $txt = $prettyDateLang[ $lang ][ 'ce_soir' ];
  • else
  • $txt = $prettyDateLang[ $lang ][ 'cette_nuit' ];
  • }
  • }
  • // hier
  • else if( $ecart < 172800 && $date[0] == $date_day[0] - 1 )
  • {
  • // le matin
  • if( date( 'a', $timestamp ) == 'am' )
  • {
  • if( $date[3] < 5 )
  • $txt = $prettyDateLang[ $lang ][ 'hier_soir' ];
  • else
  • $txt = $prettyDateLang[ $lang ][ 'hier_matin' ];
  • }
  • // pas le matin
  • else
  • {
  • if( $date[3] < 13 )
  • $txt = $prettyDateLang[ $lang ][ 'hier_midi' ];
  • else if( $date[3] < 17 )
  • $txt = $prettyDateLang[ $lang ][ 'hier_am' ];
  • else
  • $txt = $prettyDateLang[ $lang ][ 'hier_soir' ];
  • }
  • }
  • // la semaine passée
  • else if( $ecart <= 518400 )
  • {
  • // le matin
  • if( date( 'a', $timestamp ) == 'am' )
  • {
  • if( $date[3] < 5 )
  • $txt = $date[4] . ' ' . $prettyDateLang[ $lang ][ 'soir' ];
  • else
  • $txt = $date[4] . ' ' . $prettyDateLang[ $lang ][ 'matin' ];
  • }
  • // pas matin
  • else
  • {
  • if( $date[3] < 13 )
  • $txt = $date[4] . ' ' . $prettyDateLang[ $lang ][ 'midi' ];
  • else if( $date[3] < 17 )
  • $txt = $date[4] . ' ' . $prettyDateLang[ $lang ][ 'am' ];
  • else
  • $txt = $date[4] . ' ' . $prettyDateLang[ $lang ][ 'soir' ];
  • }
  • }
  • else
  • {
  • $txt = $prettyDateLang[ $lang ][ 'date'];
  • switch( $lang )
  • {
  • case 'en':
  • if( $date[0] == 1 )
  • $suffix = 'st';
  • else if( $date[0] == 2 )
  • $suffix = 'nd';
  • else if( $date[0] == 3 )
  • $suffix = 'rd';
  • else
  • $suffix = 'th';
  • break;
  • case 'fr':
  • $suffix = '';
  • break;
  • default:
  • $suffix = '';
  • break;
  • }
  • $array_search[] = '{jour}';
  • $array_search[] = '{mois}';
  • $array_search[] = '{annee}';
  • $array_search[] = '{suffix}';
  • $array_replace[] = $date[0];
  • $array_replace[] = $prettyDateLang[ $lang ][ 'mois'][ $date[1] - 1 ];
  • $array_replace[] = $date[2];
  • $array_replace[] = $suffix;
  • }
  • return str_replace( $array_search, $array_replace, $txt );
  • }
  • ?>
  • ########
  • lang.php
  • ########
  • <?php
  • if( !defined( '__LANG_PHP__' ) )
  • {
  • define( '__LANG_PHP__', 1 );
  • $prettyDateLang =
  • array(
  • 'fr' => array(
  • 'jours' => array( 'dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi' ),
  • 'mois' => array( 'janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre' ),
  • 'now' => 'Maintenant',
  • 'minutes' => 'Il y a {minutes} minute(s)',
  • 'heures' => 'Il y a {heures} heure(s)',
  • 'heure' => 'Il y a une heure',
  • 'cette_nuit' => 'Cette nuit',
  • 'ce_matin' => 'Ce matin',
  • 'ce_midi' => 'Ce midi',
  • 'cette_am' => 'Cette après-midi',
  • 'ce_soir' => 'Ce soir',
  • 'hier_soir' => 'Hier soir',
  • 'hier_matin' => 'Hier matin',
  • 'hier_midi' => 'Hier midi',
  • 'hier_am' => 'Hier après-midi',
  • 'soir' => 'soir',
  • 'matin' => 'matin',
  • 'midi' => 'midi',
  • 'am' => 'après-midi',
  • 'date' => 'le {jour} {mois} {annee}'),
  • 'en' => array(
  • 'jours' => array( 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ),
  • 'mois' => array( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ),
  • 'now' => 'Now',
  • 'minutes' => '{minutes} minute(s) ago',
  • 'heures' => '{heures} hour(s) ago',
  • 'heure' => 'One hour ago',
  • 'cette_nuit' => 'This night',
  • 'ce_matin' => 'This morning',
  • 'ce_midi' => 'This midday',
  • 'cette_am' => 'This afternoon',
  • 'ce_soir' => 'This evening',
  • 'hier_soir' => 'Yesterday evening',
  • 'hier_matin' => 'Yesterday morning',
  • 'hier_midi' => 'Yesterday midday',
  • 'hier_am' => 'Yesterday afternoon',
  • 'soir' => 'evening',
  • 'matin' => 'morning',
  • 'midi' => 'midday',
  • 'am' => 'afternoon',
  • 'date' => 'The {jour}{suffix} of {mois} {annee}'),
  • );
  • }
  • ?>
#################
Fichier principal
#################
<?php
function prettyDate( $timestamp, $lang = 'fr' )
{
	include 'lang.php';
	
	// si le code langue utilisé n'est pas défini
	if( !isset( $prettyDateLang[ $lang ] ) )
		return date( 'd/m/Y H:i:s' );
	
	// date
	$date = explode( '/', date( 'd/m/Y/H', $timestamp ) );
	$date[4] = $prettyDateLang[ $lang ][ 'jours' ][ date( 'w', $timestamp ) ];
	
	// date actuelle
	$date_day = explode( '/', date( 'd/m/Y', time() ) );
	
	$array_search =	array();
	$array_replace = array();
	
	// écart entre la date et la date actuelle
	$ecart = time() - $timestamp;
	
	// maitenant
	if( $ecart <= 300 )
		$txt = $prettyDateLang[ $lang ][ 'now' ];
	// récemment --> minutes
	else if( $ecart < 3000 )
	{
		$txt = $prettyDateLang[ $lang ][ 'minutes' ];
		$array_search[] = '{minutes}';
		$array_replace[] = ceil( $ecart / 60 );
	}
	// il y a une heure
	else if( $ecart < 7000 )
		$txt = $prettyDateLang[ $lang ][ 'heure' ];
	else if( $ecart < 10800 )
	{
		$txt = $prettyDateLang[ $lang ][ 'heures' ];
		$array_search[] = '{heures}';
		$array_replace[] = round( $ecart / 3600, 0 );
	}
	// aujourd'hui ou hier
	else if( $ecart < 86400 && $date[0] == $date_day[0] )
	{
		// le matin
		if( date( 'a', $timestamp ) == 'am' )
		{	
			if( $date[3] < 5 )
				$txt = $prettyDateLang[ $lang ][ 'cette_nuit' ];
			else
				$txt = $prettyDateLang[ $lang ][ 'ce_matin' ];
		}
		// pas le matin
		else
		{
			if( $date[3] < 13 )
				$txt = $prettyDateLang[ $lang ][ 'ce_midi' ];
			else if( $date[3] < 17 )
				$txt = $prettyDateLang[ $lang ][ 'cette_am' ];
			else if( $date[3] < 21 )
				$txt = $prettyDateLang[ $lang ][ 'ce_soir' ];
			else
				$txt = $prettyDateLang[ $lang ][ 'cette_nuit' ];
		}
	}
	// hier
	else if( $ecart < 172800 && $date[0] == $date_day[0] - 1 )
	{
		// le matin
		if( date( 'a', $timestamp ) == 'am' )
		{	
			if( $date[3] < 5 )
				$txt = $prettyDateLang[ $lang ][ 'hier_soir' ];
			else
				$txt = $prettyDateLang[ $lang ][ 'hier_matin' ];
		}
		// pas le matin
		else
		{
			if( $date[3] < 13 )
				$txt = $prettyDateLang[ $lang ][ 'hier_midi' ];
			else if( $date[3] < 17 )
				$txt = $prettyDateLang[ $lang ][ 'hier_am' ];
			else
				$txt = $prettyDateLang[ $lang ][ 'hier_soir' ];
		}
	}
	// la semaine passée
	else if( $ecart <= 518400 ) 
	{
		// le matin
		if( date( 'a', $timestamp ) == 'am' )
		{	
			if( $date[3] < 5 )
				$txt = $date[4] . ' ' . $prettyDateLang[ $lang ][ 'soir' ];
			else
				$txt = $date[4] . ' ' . $prettyDateLang[ $lang ][ 'matin' ];
		}
		// pas matin
		else
		{
			if( $date[3] < 13 )
				$txt = $date[4] . ' ' . $prettyDateLang[ $lang ][ 'midi' ];
			else if( $date[3] < 17 )
				$txt = $date[4] . ' ' . $prettyDateLang[ $lang ][ 'am' ];
			else
				$txt = $date[4] . ' ' . $prettyDateLang[ $lang ][ 'soir' ];
		}
	}
	else
	{
		$txt = $prettyDateLang[ $lang ][ 'date'];
		
		switch( $lang )
		{
			case 'en':
				if( $date[0] == 1 )
					$suffix = 'st';
				else if( $date[0] == 2 )
					$suffix = 'nd';
				else if( $date[0] == 3 )
					$suffix = 'rd';
				else
					$suffix = 'th';
				break;
				
			case 'fr':
				$suffix = '';
				break;
				
			default:
				$suffix = '';
				break;
		}
		
		$array_search[] = '{jour}';
		$array_search[] = '{mois}';
		$array_search[] = '{annee}';
		$array_search[] = '{suffix}';
		
		$array_replace[] = $date[0];
		$array_replace[] = $prettyDateLang[ $lang ][ 'mois'][ $date[1] - 1 ];
		$array_replace[] = $date[2];
		$array_replace[] = $suffix;
	}
	
	return str_replace( $array_search, $array_replace, $txt );
}
?>

########
lang.php
########
<?php
if( !defined( '__LANG_PHP__' ) )
{
	define( '__LANG_PHP__', 1 );
	
	$prettyDateLang =
		array( 
			'fr' => array(
				'jours'					=> 		array( 'dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi' ),
				'mois'					=> 		array( 'janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre' ),
				'now' 					=> 		'Maintenant',
				'minutes'				=>		'Il y a {minutes} minute(s)',
				'heures'				=>		'Il y a {heures} heure(s)',
				'heure'					=> 		'Il y a une heure',
				'cette_nuit' 		=>		'Cette nuit',
				'ce_matin' 			=>		'Ce matin',
				'ce_midi'				=>		'Ce midi',
				'cette_am'			=>		'Cette après-midi',
				'ce_soir'				=>		'Ce soir',
				'hier_soir'			=>		'Hier soir',
				'hier_matin'		=>		'Hier matin',
				'hier_midi'			=>		'Hier midi',
				'hier_am'				=>		'Hier après-midi',
				'soir'					=> 		'soir',
				'matin'					=> 		'matin',
				'midi'					=> 		'midi',
				'am'						=> 		'après-midi',
				'date'					=>		'le {jour} {mois} {annee}'),
				
			'en' => array(
				'jours'					=> 		array( 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ),
				'mois'					=> 		array( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ),
				'now' 					=> 		'Now',
				'minutes'				=>		'{minutes} minute(s) ago',
				'heures'				=>		'{heures} hour(s) ago',
				'heure'					=> 		'One hour ago',
				'cette_nuit' 		=>		'This night',
				'ce_matin' 			=>		'This morning',
				'ce_midi'				=>		'This midday',
				'cette_am'			=>		'This afternoon',
				'ce_soir'				=>		'This evening',
				'hier_soir'			=>		'Yesterday evening',
				'hier_matin'		=>		'Yesterday morning',
				'hier_midi'			=>		'Yesterday midday',
				'hier_am'				=>		'Yesterday afternoon',
				'soir'					=> 		'evening',
				'matin'					=> 		'morning',
				'midi'					=> 		'midday',
				'am'						=> 		'afternoon',
				'date'					=>		'The {jour}{suffix} of {mois} {annee}'),
		);
}
?>



 Historique

14 juin 2006 10:39:48 :
Petit correction orthographique...
15 juin 2006 12:54:08 :
Nombre d'heures jusqu'à un écart de 3 heures... :)

 Sources du même auteur

GÉRER UN .HTPASSWD
RÉCUPÉRER L'IP DU VISITEUR
Source avec Zip Source avec une capture IMAGE ANTI-SPAM
MOTEUR DE RECHERCHE DANS BDD II
Source avec Zip Source avec une capture FORMULAIRE (NEWS, LIVRE D'OR, ...)

 Sources de la même categorie

Source avec une capture AGENDA GRAPHIQUE SIMPLE (DÉBUTANT) À INTÉGRER par NicomakM
CALCUL DU NOMBRE DE JOURS CONTENUS DANS L'INTERSECTION DE DE... par curphey
CALENDRIER EN 70 LIGNES par tchconst
Source avec Zip CALENDRIER par gabay
CALENDRIER SIMPLE par manuche

 Sources en rapport avec celle ci

FORMATER DES MILLISECONDES AU FORMAT HH:MM:SS:MMM par lcef
Source avec Zip CLASSE DATETIME ÉTENDUE PHP 5.2 par nautilus99
Source avec Zip GÉNÉRATEUR DE DATE DANS TOUTES LES LANGUES DU MONDE EN (PHP)... par abdelaziz_info
FONCTION DE VÉRIFICATION DE LA DATE ET DE L'HEURE par evay16
AFFICHER UNE DATE-HEURE RÉCENTE DANS UN FORMAT NATUREL ET LI... par olid

Commentaires et avis

Commentaire de TheSin le 15/06/2006 09:54:54

C'est sympa, mais je ne comprend pas pourquoi tu définie une constante "__LANG_PHP__" inutilisée.
Par contre, au niveau de ta déclaration des tableaux, mieux vaut faire
$array = array ( value1 , value2 , etc ... );
c'est plus simple et plus pratique ;)
Bon, d'accord, ça change pas grand chose pour 4 lignes, mais bon ^^
($array_search[] et $array_replace[])

Commentaire de kankrelune le 15/06/2006 11:44:29

Sympa... par contre il me semble qu'il serait bien de changer l'entrée "heure" en "Il y a {heures} heures" et de rajouter "une_heure" avec "Il y a une heure"...


@ TheSin...

[quote]je ne comprend pas pourquoi tu définie une constante "__LANG_PHP__" inutilisée[/quote]

Tout simplement pour ne pas déclarer plusieurs fois le tableau inutilement... mais dans ce cas mieux vaut enlever le test de la présence de la constante du fichier lang et le mettre direct dans la fonction...

if(!defined( '__LANG_PHP__' ))
    include 'lang.php';

@ tchaOo°

Commentaire de TheSin le 15/06/2006 11:50:23

ahh, merci Kankrelune, je comprend mieux.
Effectivement, il serait même plus simple d'en faire un include_once ('lang.php') à la place du simple include, non ? (tant qu'à faire ^^)

Commentaire de malalam le 15/06/2006 11:53:50 administrateur CS

Ouais, j'aurais aussi plutôt eu tendance à utiliser xx_once.
Et de préférence, un require_once. Vu que le include ne génèrera pas d'erreur si le fichier n'est pas là. Mais bon...vu que la présence ou non de ce tableau est prise en compte, ça n'est pas un gros problème.
Effectivement, code sympa :-)

Commentaire de coockiesch le 15/06/2006 12:07:30

En fait, le define est une habitude héritée du C++... :-D

Kankrelune: "Sympa... par contre il me semble qu'il serait bien de changer l'entrée "heure" en "Il y a {heures} heures" et de rajouter "une_heure" avec "Il y a une heure"..."
>> Je ne comprends pas trop ce que tu veux dire...

@++

R@f

Commentaire de kankrelune le 15/06/2006 12:08:50

[quote]Vu que le include ne génèrera pas d'erreur si le fichier n'est pas là[/quote]

Si si il génère une erreur... mais require stop l'execution du script alors que include non... .. .

Quoi je chipote... aïe... non... aïe pô la tête... .. . ;o)

@ tchaOo°

Commentaire de kankrelune le 15/06/2006 12:32:45

@ coockiesch... bah tout simplement comme pour l'entrée 'minute' mais pour les heure... en gros tu remplace...

'minutes' => 'Il y a {minutes} minute(s)',
'heure'   => 'Il y a une heure',

par

'minute'   => 'Il y a une minute',
'minutes' => 'Il y a {minutes} minutes',
'heure'   => 'Il y a une heure',
'heures' => 'Il y a {heures} heures',

Après tout dépend dans quel context tu utilise cette fonction... .. .

@ tchaOo°

Commentaire de coockiesch le 15/06/2006 12:54:31

Voilà, je l'ai fait pour un écart inférieur à trois heures, :)

@++

R@f

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

date & heure php [ par eax ] salutjuste une petite question je voudrais faire une addition de 20 minutes sur un timestamp Y-m-d H:i:s comment faire?merci sylvain Mysql -- Order by [ par BirD ] Hello tout le monde, c'est toujours a propos de mon forum, je désir afficher les messsages du plus vieux au plus récent. Dans ma table, j'ai un champ Liste des enregistrements d'une table [ par SuNn ] SuNnBonjourCette boucle while semble infinie et ... à la limite je peux comprendre pourquoi, mais je n'ai pas la solution pour autant. Voila mon code date + heure [ par BeCaSiNe ] Salut à tous !J'essaye de mettre dans une variable ( $date ) la date + l'heure ( 14-10-2004 21H37 ) Mais je n'y arrive po !!! Date et heure d'un fichier sur un serveur. MySQL [ par bouffard ] Bonjour,J'utilise une base de données MySQL, avec différent champs (entre autre un champ "datecrea" format datetime).Je suis entrain de construire un inserer des données dans une base access [ par rukiyes ] bonjour, voil&#224;, j'ai un probleme pour inserer des donn&#233;e dans une base access.Et le pire c'est que je ne sais pas d'o&#249; vient le problem format de date et time en c+ [ par tertulia ] comment modifier le format de la date c'est dire remplacer les / par - et de l'heure càd remlacer : par - voilac pour pouvoir creer un fichier avec la comment passer des requetes mysql à une date/heure predefinie [ par attonnnn ] salut bon voila je suis en train de creer un jeu en php dans lequel la plupart des requetes mysql devront etre passer 12h ou bien 24h apres que la per Tri par date... [ par olerien ] Bonjour,Apr&#232;s m'&#234;tre pris la t&#234;te pour r&#233;gler un probl&#232;me de triage par date dans un tableau php d'une base MySQL, tout fonct date et heure du serveur et refresh [ par metis15 ] Bonjour,je n'ai rien trouv&#233; sur le probl&#232;me d'affichage de Date et Heure qui se met &#224; jour toute les minutes par exemple, mais SANS rec


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,562 sec (4)

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