Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Regex PCRE] Formatage d'une date

    21 mai 2006 à 15:44:16

    Bonjour à tous,

    Je me suis lancé dans la réalisation d'un système de type blog, mais totalement intégré à mon site. J'ai alors rencontré un problème, au moment d'afficher la date. Je désire en effet remplacer 21/05/2006 par 21 mai 2006. Voici comment j'ai procédé, et comment j'ai échoué :(


    $timestamp = $article['date'];
    // Sortie de la valeur de la base de données (requête non affichée ici)
    $mois = array ( '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');
    // Tableau des mois associés à leur équivalent en Anglais

    $date_article = date('d/F/Y\, \à H \h\e\u\r\e\s i', $timestamp);
    // Date du type : 21/May/2006, à 14 heures 13

    $date_article = preg_replace('!(20)(0|1[0-9])!', '17$2', $date_article);
    // Date du type : 21/May/1706, à 14 heures 13 (recul de trois siècles, parfaitement volontaire ;)

    $date_article = preg_replace("!([0-9][0-9])(\/)(.+)(\/)(.+)!", "$1 ".$mois['$3']." de l’an de Grâce $5", $date_article);
    // Date du type théorique : 21 mai de l'an de Grâce 1706, à 14 heures 13


    Or la dernière regex ne renvoit pas le nom du mois, elle ne renvoit rien, que :
    21 de l'an de Grâce 1706, à 14 heures 13

    Voyez-vous donc d'où vient le problème ?

    Merci !
    • Partager sur Facebook
    • Partager sur Twitter
      21 mai 2006 à 15:57:04

      Citation : Goldwaith



      $date_article = preg_replace('!(20)(0|1[0-9])!', '17$2', $date_article);
      // Date du type : 21/May/1706, à 14 heures 13 (recul de trois siècles, parfaitement volontaire ;)



      Tu peux m'expliquer ce masque : '!(20)(0|1[0-9])!'

      Citation : Goldwaith



      $date_article = preg_replace("!([0-9][0-9])(\/)(.+)(\/)(.+)!", "$1 ".$mois['$3']." de l’an de Grâce $5", $date_article);
      // Date du type théorique : 21 mai de l'an de Grâce 1706, à 14 heures 13



      Et ce masque aussi : "!([0-9][0-9])(\/)(.+)(\/)(.+)!"
      • Partager sur Facebook
      • Partager sur Twitter
        21 mai 2006 à 16:06:24

        Qu'est-ce qui ne va pas ? J'ai mis des parenthèses afin de récupérer des variables en sortie, sachant que l'année est du type 20 + un nombre à deux chiffres, dont j'ai supposé que le premier serait un 0 ou un 1 (cela me laisse 10 ans avant d'avoir à changer cette page, alors qu'elle le sera sans doute dans quelques mois ^^ ), et ensuite un chiffre entre 0 et 9...

        Quant au deuxième : ([0-9][0-9])(\/)(.+)(\/)(.+)
        [0-9][0-9] : les deux chiffres du jour du mois ( = [0-9]{2})
        (\/) : un slash, échappé pour la regex
        (.+) : du texte, ici le mois en Anglais
        (\/)(.+) : le dernier slash avec toute ma prose derrière (de l'an de Grâce...)
        • Partager sur Facebook
        • Partager sur Twitter
          21 mai 2006 à 16:35:50

          Le premier masque :'`20([01][0-9])`'

          <?php
          function an_degrace($match)
          {
          global $mois;
          return $match[1].' '.$mois[$match[2]].' de l’an de Grâce '.$match[3];
          }
          echo preg_replace_callback('`(\d\d)/([a-z]+)/(\d\d\d\d)`i', 'an_degrace', $date_article);
          ?>
          • Partager sur Facebook
          • Partager sur Twitter

          [Regex PCRE] Formatage d'une date

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown