IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Format date en Français


Sujet :

Langage PHP

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Février 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Février 2020
    Messages : 2
    Par défaut Format date en Français
    Bonjour,

    J'ai cette partie du code pour la date ... comment la transformer pour que l'affichage se fasse en Français.
    Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    //date format
    if (!function_exists('helper_date_format')) {
        function helper_date_format($datetime)
        {
            $date = date("d/m/Y", strtotime($datetime));
            $date = str_replace("Jan", trans("January"), $date);
            $date = str_replace("Feb", trans("February"), $date);
            $date = str_replace("Mar", trans("March"), $date);
            $date = str_replace("Apr", trans("April"), $date);
            $date = str_replace("May", trans("May"), $date);
            $date = str_replace("Jun", trans("June"), $date);
            $date = str_replace("Jul", trans("July"), $date);
            $date = str_replace("Aug", trans("August"), $date);
            $date = str_replace("Sep", trans("September"), $date);
            $date = str_replace("Oct", trans("October"), $date);
            $date = str_replace("Nov", trans("November"), $date);
            $date = str_replace("Dec", trans("December"), $date);
            return $date;
     
        }

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    salut,

    il faut utiliser la bibliothèque d'internationalisation ICU pour ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $fmt = new IntlDateFormatter('fr_FR', IntlDateFormatter::NONE, IntlDateFormatter::NONE);
    $fmt->setPattern('EEEE dd MMMM YYYY');
    echo $fmt->format(new DateTime());   // jeudi 20 février 2020
    Tiens un peu de lecture par ici

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Février 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Février 2020
    Messages : 2
    Par défaut
    Salut,

    Mais je mets ça où ?
    avant, après ?

    Merci pour ton aide

  4. #4
    Membre expérimenté Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Par défaut
    Bonjour, j'ajoute qu'on peut aussi utiliser setlocale() (documentation) et strftime() (documentation).

    Si c'est juste pour les dates qu'il s'agit d'afficher en français, c'est suffisant.
    Mais pour une application multilingue, la solution de @rawsrc est bien meilleure.
    Attention à bien lire la doc aussi, pour le comportement de setlocale() dans un environnement multi-thread, notamment.

  5. #5
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut Avec setlocale, cela ne fonctionne pas
    Bonjour,

    Citation Envoyé par Trehinos Voir le message
    Bonjour, j'ajoute qu'on peut aussi utiliser setlocale() (documentation) et strftime() (documentation).

    Si c'est juste pour les dates qu'il s'agit d'afficher en français, c'est suffisant.
    Mais pour une application multilingue, la solution de @rawsrc est bien meilleure.
    Attention à bien lire la doc aussi, pour le comportement de setlocale() dans un environnement multi-thread, notamment.
    J'utilise setlocale en vain :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
      date_default_timezone_set('Europe/Paris') ;
      setlocale(LC_ALL, ['fr', 'fra', 'fr_FR', 'fr_FR@euro']) ;
    function dateSql2fr ($dateSql)
    {
    	$time = strtotime($dateSql) ;
    	return strftime("%A %B %Y", $time) ;
    }
    ?>
    <html>
    	<head> </head>
       <body>
            <h1>Tests</h1>
    <h2>      
    <?php
    echo  "<br /> Date : " . dateSql2fr ("2020-03-07 14:13:30") ;
    ?>
    </h2>
    <h1>
    <a href="preTest.html" > retour </a>
    </h1>
    </body>
    </html>
    et s'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Tests
    Date : Saturday March 2020
    retour
    Je précise que les php.ini de /etc/apache2 et cli sont bien à Europe/Paris comme me le dit php_info ().

    Why ?

  6. #6
    Membre expérimenté Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Par défaut
    Vous avez essayé la solution de rawsrc ?

    Sinon, que vous renvoie l'appel à la fonction setlocale(LC_ALL, '0'); (renvoie la locale courante) ?

    Je cite la documentation :
    Retourne la nouvelle configuration locale, ou FALSE si la localisation n'est pas implémentée sur votre plate-forme, si la variable de localisation n'existe pas, ou si la catégorie spécifiée n'est pas valide.
    Avez-vous testé le retour de l'appel setlocale(LC_ALL, ['fr', 'fra', 'fr_FR', 'fr_FR@euro']) ; peut être qu'il échoue ?

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 414
    Par défaut
    Comme déjà dit, rawsrc a donné la solution qui permet de s'affranchir de l'utilisation de setLocale, donc autant utiliser cette solution.

    Si tu utilises un objet dateTime cela donne donc :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function objet_date_format($datetime)
    {
    	$fmt = new IntlDateFormatter('fr_FR', IntlDateFormatter::NONE, IntlDateFormatter::NONE);
    	$fmt->setPattern('EEEE dd MMMM YYYY');
    	return $fmt->format($datetime);
    }
    $date = new DateTime();
    echo objet_date_format($date);

    Si tu utilises une chaine de caractère (résultat d'une requête mysql par exemple) on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function string_date_format($datetime)
    {
    	$cal = IntlCalendar::fromDateTime("$datetime Europe/Paris");
    	return IntlDateFormatter::formatObject($cal, "EEEE dd MMMM YYYY", "fr_FR");
    }
    $date = '2020-03-10 18:34:22.759964';
    echo string_date_format($date);
    Ces deux fonctions retourne aujourd'hui : "mardi 10 mars 2020"

  8. #8
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut
    Bonjour,
    Merci ABCIWEB, j'avais lu rawsrc mais
    Citation Envoyé par Trehinos
    Bonjour, j'ajoute qu'on peut aussi utiliser setlocale() (documentation) et strftime() (documentation).
    Si c'est juste pour les dates qu'il s'agit d'afficher en français, c'est suffisant.
    et je ne sais pas si je pourrais disposer de intl sur l'hébergeur ovh.

    var_dump(setlocale(LC_ALL, '0')) donne string(1) "C" et
    var_dump(setlocale(LC_ALL, ['fr', 'fra', 'fr_FR', 'fr_FR@euro'])) donne bool(false).
    Dans mon info.php je lis
    date/time support enabled
    timelib version 2017.09
    "Olson" Timezone Database Version 0.system
    Timezone Database internal
    Default timezone Europe/Paris
    Alors comment faire fonctionner setlocale ?

  9. #9
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par Choucas35 Voir le message
    et je ne sais pas si je pourrais disposer de intl sur l'hébergeur ovh.
    T'as essayé au moins ?
    Tu verras ça fonctionne sans problème (et heureusement que la lib est dispo)

  10. #10
    Membre expérimenté Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Par défaut
    Si la bonne locale n'est pas installée, je n'ai pas de solution à vous donner sur un hébergeur =/
    Utilisez Intl, ça devrait fonctionner puisque c'est une bibliothèque native depuis PHP 5.3

    Normalement, c'est bon =)
    http://fpm7.0-check.cluster003.ovh.net/phpinfo.php

  11. #11
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    T'as essayé au moins ?
    Tu verras ça fonctionne sans problème (et heureusement que la lib est dispo)
    Merci pour l'information,
    Je n'ai pas encore l'accès à OVH pour cette appli mais j'ai installé intl sur php7.2/ubuntu 18.04 et ça fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo apt-get install php7.*-intl
    Ma conclusion : oublier le setlocale.
    Merci à tous

  12. #12
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 414
    Par défaut
    Citation Envoyé par Choucas35 Voir le message
    Ma conclusion : oublier le setlocale.
    Oui c'est ce que l'on dit depuis le début. Surtout qu'il y a que les serveurs personnels qui n'ont pas nécessairement IntlDateFormatter/IntlCalendar activées, mais ces fonctions sont normalement disponibles sur tous les hébergements mutualisés professionnels type OVH.

Discussions similaires

  1. Mettre format date en français
    Par js8bleu dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 29/04/2012, 13h03
  2. Format date (anglais / français)
    Par delavega dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/01/2012, 14h39
  3. [phpMyAdmin] Format DATE en français par défaut
    Par fchevali dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 07/05/2008, 09h52
  4. Pb format date anglais/Français
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/07/2007, 21h46
  5. Format Date Anglais/Français
    Par macben dans le forum Oracle
    Réponses: 4
    Dernier message: 22/08/2005, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo