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