Fonction date() en français: fdate()

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 996 fois - Téléchargée 32 fois

Contenu du snippet

J'ai vu qu'il existe beaucoup de codes de conversion de date, mais aucun ne me convient. Soit les fonctions font 10 pages, soit elles sont incomplètes... C'est pour ça que j'ai écrit la mienne. Elle se base sur la fonction date() de PHP, prends les mêmes paramètres et accepte les mêmes formats, plus un: la date RFC 2822 en français (format R).

Voici donc la fonction. Elle n'est pas très commentée, mais c'est uniquement un série de tests...

Source / Exemple :


function fdate($format, $timestamp = 0) {
    $days =      array('Mon' => 'Lun', 'Tue' => 'Mar', 'Wed' => 'Mer', 'Thu' => 'Jeu', 'Fri' => 'Ven', 'Sat' => 'Sam', 'Sun' => 'Dim',
                            'Monday' => 'Lundi', 'Tuesday' => 'Mardi', 'Wednesday' => 'Mercredi', 'Thursday' => 'Jeudi', 'Friday' => 'Vendredi', 'Saturday' => 'Samedi', 'Sunday' => 'Dimanche');
    $months =    array('Jan' => 'Jan', 'Feb' => 'Fév', 'Mar' => 'Mars', 'Apr' => 'Avr', 'May' => 'Mai', 'Jun' => 'Juin', 'Jul' => 'Jui', 'Aug' => 'Aoû', 'Sep' => 'Sept', 'Oct' => 'Oct', 'Nov' => 'Nov', 'Dec' => 'Dec', 
                            'January' => 'Janvier', 'February' => 'Février', 'March' => 'Mars', 'April' => 'Avril', 'May' => 'Mai', 'June' => 'Juin', 'July' => 'Juillet', 'August' => 'Août', 'September' => 'Septembre', 'October' => 'Octobre', 'November' => 'Novembre', 'December' => 'Décembre');
    
    if ($timestamp == 0) $timestamp = time();
    
    $out = '';
      
    for ($n = 0; $n < strlen($format); $n++) {
      $c = substr($format, $n, 1);
      if (preg_match('/[aABcdDFghHiIjlLmMnOrRsStTUwWyYzZ]/', $c)) {
        // Format chr, convert it
        if ($c == 'a' || $c == 'A') {
          if (substr(strtolower(date($c, $timestamp)), 0, 1) == 'a') {
            $out .= 'matin';
          } else {
            $out .= 'après-midi';
          }
        } elseif ($c == 'D' || $c == 'l') {
          $out .= $days[date($c, $timestamp)];
        } elseif ($c == 'F' || $c == 'M') {
          $out .= $months[date($c, $timestamp)];
        } elseif ($c == 'S') {
          if (date($c, $timestamp) == 'st') {
            $out .= 'er';
          } else {
            $out .= 'ème';
          }
        } elseif ($c == 'R') {
          $out .= fdate('D, d M Y H:i:s O', $timestamp);
        } else {
          $out .= date($c, $timestamp);
        }
      } else {
        // No format chr, just print it.
        $out .= $c;
      }
    }
    
    return $out;
  }

echo fdate('a A B c d D F g h H i I j l L m M n O r R s S t T U w W y Y z Z R');

Conclusion :


Si vous rencontrer des bugs, faites-le moi savoir !

A voir également

Ajouter un commentaire

Commentaires

cs_seyev
Messages postés
93
Date d'inscription
samedi 9 juin 2001
Statut
Membre
Dernière intervention
6 mai 2005
1 -
ah oui... juste. c'est vrai qu'on ne dit pas 18ème novembre, mais 1er oui :) merci j'y avais même pas pesné :)
lerouxju
Messages postés
3
Date d'inscription
jeudi 25 septembre 2003
Statut
Membre
Dernière intervention
15 décembre 2004
-
Je voudrais juste proposer une petite modification du code en remplaçant :
} elseif ($c == 'S') {
if (date($c, $timestamp) == 'st') {
$out .= 'er';
} else {
$out .= 'ème';
}
par :
} elseif ($c == 'S') {
if (date($c, $timestamp) == 'st') {
$out .= 'er';
}
car ça me parraît plus adapter au format de date français.
A part ça rien à redire c'est parfait !!!
cs_seyev
Messages postés
93
Date d'inscription
samedi 9 juin 2001
Statut
Membre
Dernière intervention
6 mai 2005
1 -
appelée plusieurs fois ? oui une pour chaque char, c'est vrai mais est-ce que c'est bien d'avoir la date complète et de traduire après ? avec un preg_replace et deux tableaux, pourquoi pas...

en ce qui concerne le elseif, c'est tout à fait correct, cf. http://ch2.php.net/manual/en/control-structures.elseif.php
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
26 -
pour augmenter la vitesse, tu pourais stoquer la date dans une variable, la tu as tout une série de tests, si c'ets la fin qui est bonne, alors la fonction date a déja été apellée plusieurs fois...

sinon, j'ai pas tout compris mais il y a un espace entre else et if...

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.