web 2.0

Seebz.net

La Date en Français avec PHP

Cet article va nous permettre de formater une date en français textuel à l'aide d'une fonction PHP que nous allons créer.
Ainsi, nous pourrons par exemple écrire "article posté le Mardi 5 décembre 2006" sur nos belles pages.

Cette méthode peux paraître 'lourde' aux yeux de certains mais je la privilégie car elle utilise exactement la même syntaxe que la fonction date() ce qui permet son utilisation sans pour autant devoir modifier beaucoup de code dans le cas où l'on utilise déja la fonction date().

La fonction date() de PHP

Cette fonction nous sera très utile, je vous invite donc à vous documenter sur le site de php.net.

Sa syntaxe est la suivante :

date("format",timestamp)

Le Format est une série de caractères qui spécifie ce que l'on souhaite, par exemple d pour le numéro du jour (de 01 à 31) ou m pour le numéro du mois. (voir la liste sur php.net).

Le Timestamp est le nombre de seconde depuis le 1er janvier 1970, c'est en fait la date que l'on souhaite afficher (par exemple récupérée dans une base de données).
S'il n'est pas renseigné, la fonction date() utilise la date actuelle.

Pour obtenir le timestamp actuel, il faut utiliser la fonction time().
Notez qu'il est possible de convertir une date d'un autre format en timestamp. (explications plus bas)Sachant cela, nous savons déja formater une date (dans l'exemple, timestamp correspond au 10 mars 2007):

echo date("d-m-y",timestamp);           // 10-03-07
echo date("d/m/Y H:i:s",timestamp);     // 10/03/2007 15:25:37
echo date("l d F Y à H:i:s",timestamp); // Saturday 10 March 2007 à 15:25:37

Etude du problème

Nous remarquons que le fonction date() fait le plus gros du travail. Le seul problème est que le texte retourné est en anglais.

Nous allons donc faire une fonction qui utilisera la fonction date() et ensuite 'traduire' le texte créé en français.

Nous appellerons notre fonction date_fr() et allons lui donner la même syntaxe d'utilisation que la fonction date() de php.

Ainsi nous ne devrions que remplacer date() par date_fr() dans nos codes sources php.

Notre fonction date_fr()

Dans un premier temps, nous allons simplement récupérer les paramètres afin d'avoir notre date formatée en Anglais.

function date_fr($format,$timestamp=false) {
  if ( !$timestamp )
    $date_en = date($format);
  else
    $date_en = date($format,$timestamp);
  ...
}

$date_en contient maintenant la chaine retournée par date(). Nous allons donc la 'traduire' en français.

Pour se faire, nous allons utiliser la fonction str_replace() de php.
Cette fonction requiert 3 paramètres:
- Le texte à chercher,
- Le texte qui remplace,
- La chaine que l'on veut modifier.

str_replace("anglais","français","Une phrase en anglais.")

Après exécution, cette exemple retournera "Une phrase en français".

Nous allons donc créer 2 tableaux (array) qui contiendront la série des jours et mois dans chacunes des langues et les utiliser avec str_replace.

$texte_en = array(
                  "Monday", "Tuesday", "Wednesday", "Thursday",
                  "Friday", "Saturday", "Sunday", "January",
                  "February", "March", "April", "May",
                  "June", "July", "August", "September",
                  "October", "November", "December"
);
$texte_fr = array(
                  "Lundi", "Mardi", "Mercredi", "Jeudi",
                  "Vendredi", "Samedi", "Dimanche", "Janvier",
                  "Février", "Mars", "Avril", "Mai",
                  "Juin", "Juillet", "Août", "Septembre",
                  "Octobre", "Novembre", "Décembre"
);

Ensuite le remplacement de texte :

$date_fr = str_replace($texte_en,$texte_fr,$date_en);

Voici notre date en français, par contre les jours et mois générés en 3 caractères ne sont pas convertis.
Nous pouvons retravailler nos tableaux afin de les tronquer mais pour pas compliquer nous allons simplement refaire l'opération précédante avec ces jours et mois sur 3 caractères :

$texte_en = array(
                  "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun",
                  "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
                  "Aug", "Sep", "Oct", "Nov", "Dec"
);
$texte_fr = array(
                  "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim",
                  "Jan", "Fév", "Mar", "Avr", "Mai", "Jui", "Jui",
                  "Aoû", "Sep", "Oct", "Nov", "Déc"
);

Nous refaisons la convertion et retournons le résultat.Cette fois-ci nous devons travailler avec la chaîne de caractère $date_fr.

$date_fr = str_replace($texte_en,$texte_fr,$date_fr);

return $date_fr;

Pour résumer

Pour éviter des problèmes de jeux de caractère, nous allons remplacer les caractères accentués par leurs entitées html.

Le code final est donc le suivant :

function date_fr($format, $timestamp=false) {
  if ( !$timestamp ) $date_en = date($format);
  else               $date_en = date($format,$timestamp);

  $texte_en = array(
                    "Monday", "Tuesday", "Wednesday", "Thursday",
                    "Friday", "Saturday", "Sunday", "January",
                    "February", "March", "April", "May",
                    "June", "July", "August", "September",
                    "October", "November", "December"
  );
  $texte_fr = array(
                    "Lundi", "Mardi", "Mercredi", "Jeudi",
                    "Vendredi", "Samedi", "Dimanche", "Janvier",
                    "Février", "Mars", "Avril", "Mai",
                    "Juin", "Juillet", "Août", "Septembre",
                    "Octobre", "Novembre", "Décembre"
  );
  $date_fr = str_replace($texte_en, $texte_fr, $date_en);

  $texte_en = array(
                    "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun",
                    "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
                    "Aug", "Sep", "Oct", "Nov", "Dec"
  );
  $texte_fr = array(
                    "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim",
                    "Jan", "Fév", "Mar", "Avr", "Mai", "Jui",
                    "Jui", "Aoû", "Sep", "Oct", "Nov", "Déc"
  );
  $date_fr = str_replace($texte_en, $texte_fr, $date_fr);

  return $date_fr;
}

C'est bien beau tous ça mais comment je fais si je n'ai pas ma date sous forme de timestamp ?Il faut utiliser la fonction mktime() de php. Cette fonction converti une date en timestamp.

Utilisation

Des exemples sur l'utilisation de notre fonction date_fr() et de la fonction mktime() se trouvent sur cette page.

Partager : Share
 

4 Réponses à “La Date en Français avec PHP”

  1. bonjour,

    Je te propose une alternative, plus courte (10 lignes)et pour l'affichage suivant deux langues (mais possible d'en rajouter très facilement) si le code t'intéresse fait le moi savoir et je te le transmet, j'ai pas voulu le mettre sur ce formulaire je ne sais pas comment tu traite tes inputs.

  2. Salut guillaume,
    tu aurais pu poster le code, il aurait été affiché tel quel (mais sans plus de mise en page).
    sinon, pour la fonction, je sais que ce n'est pas la plus courte mais je la privilégie car elle fonctionne comme la fonction date(), avec toutes les variantes de 'format'.
    Si ton code gère aussi la même syntaxe que date(), je suis preneur :p
    A bientot sur Seebz.be

  3. Ce serait pas plus simple avec setlocale(LC_TIME, 'fr_FR'); ?

  4. Oui, en effet, encore faut-il avoir la possibilité de changer ces configurations.
    Les hébergeurs bloquant parfois ce genre de chose, nous devons trouver d'autres méthodes.

Poster un commentaire

Remonter