Internationalisation de dates avec PHP et MySQL

PHP Ajouter un commentaire

Dans le cadre d’un des mes projets, j’ai été amené à me poser la question de l’internationalisation de données d’un site multilingue, en particulier des dates.
La date n’étant pas formatée automatiquement avec une locale idéale par MySQL, puisque GETFORMAT ne renvoie pas de valeur correspondant au format français, je me suis résigné à le faire “à la main”.

Voici le résultat de deux expérimentations pour formater une date. Le premier test tire parti de la fonction DATE_FORMAT() de MySQL. La seconde tire elle parti des fonctions PHP de formatage de date.

// TEST 1 : Formatage de la date avec MySQL
$cnx = mysql_connect('localhost', 'root', '');
mysql_select_db('test_chris');
$sql = 'SELECT DATE_FORMAT(`date`, '%d/%m/%Y') AS formated_date FROM `test_date`';
$rs = mysql_query($sql);
 
while ($tab = mysql_fetch_array($rs)) {
    echo "DATE = " . $tab['formated_date'] . '<br />';
}
 
mysql_close();
 
// TEST 2 : Formatage de la date avec fonctions PHP
$cnx = mysql_connect('localhost', 'root', '');
mysql_select_db('test_chris');
$sql = 'SELECT `date` FROM `test_date`';
$rs = mysql_query($sql);
 
while ($tab = mysql_fetch_array($rs)) {
    echo "DATE = " . strftime('%d/%m/%Y', strtotime($tab['date'])) . '<br />';
}
 
mysql_close();

Sur la base d’un calcul de 30000 enregistrements dans la table test_date, on obtient un gain de performance d’environ 50% avec le premier test. Cela peut sembler logique puisque cette version élague plusieurs opérations intermédiaires via PHP et des librairies natives.
La solution choisie repose donc sur un format de date de type “%d/%m/%Y” stocké dans un fichier de locale au format .ini (lu avec parse_ini_file()) et passé dans la fonction DATE_FORMAT() de la requête SQL.

Exemple de fichier fr_FR.ini :

date_format = %d/%m/%Y

Et la façon de la charger pour la passer dans PHP :

$lang = parse_ini_file('fr_FR.ini');
$sql = 'SELECT DATE_FORMAT(`date`, '' . $lang['date_format'] . '') AS formated_date FROM `test_date`';

2 Réponses to “Internationalisation de dates avec PHP et MySQL”

  1. paulgreg Says:

    Intéressant.
    Je ne connaissais pas l’utilisation du parse_ini_file.
    Cela m’intéresse pour les propriétés des sites web.

  2. Christophe Buguet Says:

    Oui c’est l’équivalent du fichier de properties avec Java. Je trouve ca assez intéressant comme alternative pour gérer les messages par langue, si les fonction gettext ne sont pas disponibles.

Leave a Reply

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in