Pretty date

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

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.