Les articles publiés sur le site

  • Anomalie #4843 (Fermé) : spip4 les vignettes sont en svg

    6 juillet 2021, par b b
  • Anomalie #4836 : Graphiques et interface arabe

    6 juillet 2021, par George Kandalaft

    Merci, c'est toujours ça.
    Les mois qui s'affichent sont les mois égyptien (tirés de l'anglais, contrairement à SPIP qui affiche les mois arabes) car dans d3-time-format il n'y a que ar-EG.json. J'ai ajouté un fichier json pour les mois arabes dans le github de d3-time-format en espérant que ce sera mis à jour dans pas très longtemps.

  • Anomalie #4830 : extraire_date extravagant

    6 juillet 2021
    Une date 2021 12 32
        2021-12-03
    

    Ça retourne une date "03" puisque 32 n'est pas un jour valide, mais 3 peut l'être.

  • Anomalie #4830 : extraire_date extravagant

    6 juillet 2021

    Il faut return "" ou null aussi si on trouve rien (la fonction ne le fait pas actuellement).

  • Anomalie #4830 : extraire_date extravagant

    6 juillet 2021

    Pourquoi pas. Je te propose (ou quelqu'un) de faire une PR pour ça.
    Il faudrait ajouter en même temps des tests unitaires parce que bon.
    Ci dessous un code valide qui fait la demande.

    Ce qui me gène tout de même c'est le [^0-9]* dans la regex (déjà présente dans l'ancienne fonction) qui du coup peut chercher une date coupée dans un grand texte…
    Tel que : "En 2012 à l’orée du bois se trouvait 10 chevaux et 4 biches.", qui sort la date "2012-10-04" (ou 2012-10-01 avant cette proposition).
    Donc l'usage est possiblement assez limité de cette fonction si laissée telle quelle.

    
    /**
     * Extrait une date d'un texte et renvoie le résultat au format de date SQL
     *
     * L'année et le mois doivent être numériques.
     * Le séparateur entre l'année et le mois peut être un `-`, un `:` ou un texte
     * quelconque ne contenant pas de chiffres.
     *
     * Si un numéro de jour valide n'est pas indiqué, le résultat est alors le 1er du mois.
     *
     * @link https://www.spip.net/5516
     * @param string $texte
     *    Texte contenant une date tel que `2008-04`
     * @return string
     *    Date au format SQL tel que `2008-04-01`
     **/
    function extraire_date($texte) {
        // format = 2001-08-12 ou 2001-08
        $has_date = preg_match(
            ",
            # une annee
            (?P[1-2][0-9]{3})
            # des caracteres sans numeros
            [^0-9]*
            # un mois
            (?P1[0-2]|0?[1-9])
            (?:
                # des caracteres sans numeros
                [^0-9]*
                # un jour
                (?P3[0-1]|[1-2][0-9]|0?[1-9])
            )?
            ,x", 
            $texte, 
            $regs
        );
        if ($has_date) {
            $date = [
                $regs["annee"], 
                sprintf("%02d", $regs["mois"]), 
                sprintf("%02d", $regs["jour"] ?? "01") 
            ];
            return implode("-", $date);
        }
    }
    

    
    #SQUELETTE 
    
    #SET{liste,#LISTE{
        "Une date 2020 01",
        "Une date 2020 12 autre",
        "Une date 2020 autre 12 autre",
        "Une date 2021 12 01",
        "Une date 2021 12 00",
        "Une date 2021 12 31",
        "Une date 2021 12 32",
        "Une date 2021 autre 12 date 21",
        "En 2012 à l’orée du bois se trouvait 10 chevaux et 4 biches." 
    }}
    
    
    #VALEUR
    [(#VALEUR|extraire_date)]

    Sortie :

    
    
    Une date 2020 01
        2020-01-01
    Une date 2020 12 autre
        2020-12-01
    Une date 2020 autre 12 autre
        2020-12-01
    Une date 2021 12 01
        2021-12-01
    Une date 2021 12 00
        2021-12-01
    Une date 2021 12 31
        2021-12-31
    Une date 2021 12 32
        2021-12-03
    Une date 2021 autre 12 date 21
        2021-12-21
    En 2012 à l’orée du bois se trouvait 10 chevaux et 4 biches.
        2012-10-04