Pretty date

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 550 fois - Téléchargée 27 fois

Contenu du snippet

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-HEURE-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 / Exemple :


#################
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}'),
		);
}
?>

A voir également

Ajouter un commentaire

Commentaires

coockiesch
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3 -
Voilà, je l'ai fait pour un écart inférieur à trois heures, :)

@++

R@f
kankrelune
Messages postés
1305
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
@ 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°
kankrelune
Messages postés
1305
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
Vu que le include ne génèrera pas d'erreur si le fichier n'est pas là


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°
coockiesch
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3 -
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
malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
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 :-)

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.