Partage
  • Partager sur Facebook
  • Partager sur Twitter

Afficher une date en français

Sujet résolu
    26 octobre 2016 à 15:03:16

    Bonjour,

    Dans ma base de donné SQL, j'ai des dates de format Y-m-d. J'aimerais changer en d F Y et j'y arrive, sauf que le F (mois complet) est en anglais.

    J'ai regardé sur google plusieurs solutions, mais je suis confus. J'ai essayé un setlocal et changer F par %B ou %#B, mais ça ne fonctionne pas.

    Voici mon code simple pour la date.

    $date1 = date_create($row['DateJournal']);
    	$date = date_format($date1, 'd F Y');



    • Partager sur Facebook
    • Partager sur Twitter
      26 octobre 2016 à 15:22:39

      Salut, il te suffit d'utiliser la fonction strftime avec ton 1er $date1 :

      setlocale(LC_TIME, "fr_FR");
      echo strftime("%A %d %B %G", strtotime($date1));


      - %A te donne le jour en lettres

      - %d te donne le jour en chiffres

      - %B te donne le mois en lettres

      - %G te donne l'année

      -
      Edité par OCHelper 26 octobre 2016 à 15:54:52

      • Partager sur Facebook
      • Partager sur Twitter
        26 octobre 2016 à 15:39:26

        ok merci.

        Une autre question que je viens tout juste d'avoir en tête.

        Pour afficher la date d'aujourd'hui pour pouvoir transmettre une donnée dans la base de données il faudrait juste mettre ça?

        setlocale(LC_TIME, "fr_FR");
        $date = strftime("%d %B %Y");



        EDIT : 

        En suivant ce lien http://php.net/manual/fr/function.strftime.php j'ai vu que %C affiche les siècle et non les jours.

        J'ai donc ça :

        setlocale(LC_TIME, "fr_FR");
        $date1 = $row['DateJournal'];
        $date = strftime("%d %B %Y", strtotime($date1));
        
        echo $date

        sauf que le mois est toujours en anglais...?

        -
        Edité par NicolasD5 26 octobre 2016 à 15:54:46

        • Partager sur Facebook
        • Partager sur Twitter
          26 octobre 2016 à 15:56:33

          $date1 = date('Y-m-d'); // Date du jour
          setlocale(LC_TIME, "fr_FR");
          echo strftime("%A %d %B %G", strtotime($date1)); Mercredi 26 octobre 2016

          Pour la date du jour tu mets juste

          date('Y-m-d')

          -
          Edité par OCHelper 26 octobre 2016 à 15:59:13

          • Partager sur Facebook
          • Partager sur Twitter
            26 octobre 2016 à 16:08:21

            Merci. Maintenant je dois trouver pourquoi setlocale ne fonctionne pas... Pourtant ça reconnait les %B, mais ne change pas la langue.

            Peut-être que c'est parce que je suis sur WAMP? Pourtant WAMP est en français.

            EDIT :

            ... ok j'ai changé pour cela et maintenant ça fonctionne.

            setlocale(LC_TIME, "fr_FR", "French");

            EDIT 2 :

            C'est vrai qu'avec cette méthode il est impossible d'ajouter une date dans la base de donnée?

            J'aurais besoin de faire en sorte que lorsque l'on envoie des informations dans la base de données via un formulaire, on envoie aussi la date dans la bdd. Au pire je recrée une date lors de l'envoie.

            -
            Edité par NicolasD5 26 octobre 2016 à 16:28:00

            • Partager sur Facebook
            • Partager sur Twitter
              26 octobre 2016 à 16:32:30

              Affranchis-toi des locales systèmes, qui sont un vrai bazar sur lequel on ne peut pas compter, en t'orientant vers IntlDateFormatter : ça fonctionnera partout (tant que l'extension intl est active) et le résultat est en UTF-8.

              -
              Edité par julp 26 octobre 2016 à 16:33:27

              • Partager sur Facebook
              • Partager sur Twitter
                3 décembre 2016 à 18:11:45

                Bonjour,

                J'ai un problème avec le mois de décembre ne prenant pas en compte le "é". Pourtant toute ma page est correct en UTF8, donc peut-être que c'est Wamp qui pose problème?

                Y a-t-il une solution pour corriger ça?

                Pourtant en ce moment ma date est comme ça en PHP et ça fonctionne très bien pour afficher la date en français :

                $date1 = date('Y-m-d');
                	setlocale(LC_TIME, "fr_FR","French");
                	$date = strftime("%d %B %Y", strtotime($date1));
                	



                • Partager sur Facebook
                • Partager sur Twitter
                  3 décembre 2016 à 18:26:27

                  Sous Windows, tu n'auras pas de l'UTF-8 mais du CP1252. Ce qui veut dire que si tu tiens à te baser sur setlocale, que tu dois reconvertir ta chaîne (le résultat de strftime), via iconv par exemple, de CP1252 à UTF-8. Mais tu aurais sans doute besoin d'ajouter quelques tests (if) parce que si tu l'héberges sur un serveur, tu risques encore d'avoir autre chose (de l'UTF-8 ou de l'ISO-8859-1(5) - et encore si ces locales sont activées/disponibles).

                  C'est bien pour ça que je t'avais recommandé d'utiliser la classe IntlDateFormatter pour avoir un code fiable et portable ...

                  -
                  Edité par julp 3 décembre 2016 à 18:29:38

                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 décembre 2016 à 18:36:10

                    ok mais comment j'utilise le IntlDateFormatter? Est-ce que je dois changer mon code complètement?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 décembre 2016 à 18:40:02

                      $datefmt = new IntlDateFormatter('fr_FR', NULL, NULL, NULL, NULL, 'dd MMMM yyyy');
                      // pour une date qui vient d'un champ DATE(TIME) de MySQL
                      $date1 = date_create($row['DateJournal']);
                      // pour la date courante
                      #$date1 = date_create(); # procédural
                      #$date1 = new DateTime; # OO
                      
                      echo $datefmt->format($date1);
                      

                      Simple, non ?

                      PS : si le format ne correspond pas, la doc est par là

                      -
                      Edité par julp 3 décembre 2016 à 19:01:38

                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 décembre 2016 à 1:24:43

                        Salut, encore moi. Cela fonctionne, par contre il est encore le 3 décembre chez moi et il est indiqué 4 décembre. Y a-t-il possibilité de choisir la TimeZone?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 décembre 2016 à 1:28:11

                          Ca n'a rien à voir avec le formatage.

                          Paramètre date.timezone sinon fonction date_default_timezone_set

                          • Partager sur Facebook
                          • Partager sur Twitter
                            5 décembre 2016 à 1:44:47

                            Merci.

                            J'ai mis

                            date_default_timezone_set('America/New_York');

                            J'ai essayé avec EDT, mais ça ne fonctionne pas. Est-ce que ça fonctionne avec d'autres villes comme Montréal?

                            Aussi, juste pour satisfaire ma curiosité, j'ai essayé de trouver comment changer le timezone dépendamment d'où ce trouve l'utilisateur, mais je n'ai pas trouvé la bonne réponse... Connaitrais-tu quelque chose à propos de cela?



                            • Partager sur Facebook
                            • Partager sur Twitter
                              5 décembre 2016 à 2:05:29

                              Est-ce que ça fonctionne avec d'autres villes comme Montréal?

                              Tu trouves la liste dans la doc

                              comment changer le timezone dépendamment d'où ce trouve l'utilisateur, mais je n'ai pas trouvé la bonne réponse... Connaitrais-tu quelque chose à propos de cela?

                              Comment le serveur pourait connaître le fuseau du client ? Si tu veux quelque chose de fiable, le plus simple c'est de le laisser le configurer/renseigner. Ca ne l'est pas en se basant sur l'IP pour tenter de déduire le pays/fuseau.

                              -
                              Edité par julp 5 décembre 2016 à 2:06:12

                              • Partager sur Facebook
                              • Partager sur Twitter
                                6 décembre 2016 à 20:48:36

                                J'ai trouvé une méthode simple pour prendre en compte UTF-8 avec mon code original. Il faut seulement ajouter l'encodage comme cela :

                                $date = utf8_encode(strftime("%d %B %Y", strtotime($date1)));


                                PS: Le IntlDateFormatter ne fonctionnant pas avec certaines version php/wamp.

                                -
                                Edité par NicolasD5 6 décembre 2016 à 20:49:37

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  7 décembre 2016 à 15:15:34

                                  Salut !

                                  NicolasD5 a écrit:

                                  PS: Le IntlDateFormatter ne fonctionnant pas avec certaines version php/wamp.

                                  C'est effectivement vrai pour PHP 5.2 et inférieur, mais PHP 5.2 n'est officiellement plus supportée depuis le 6 janvier 2011, aussi. En revanche, le souci ne sera jamais WAMP qui, pour autant que je me souvienne, fournissait icu avec les packages de PHP 5.3 dès que cette version a été disponible.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    27 juin 2018 à 17:14:03

                                    Salut, je déterre pour lever un mystère que j'ai pu rencontrer,

                                    certains formatages diffèrent selon le système qu'on emploi ex: le numéro du jour sans le zéro devant,

                                    selon qu'on teste son appli en local (sur windows) ou sur serveur linux.

                                    1/ Toujours suivre les conseils de Julp !

                                    2/ Pour plus détails : https://sns.pm/Article/Afficher-simplement-la-date-du-jour-en-français-en-PHP

                                    3/ Bien sûr l'heure ou la date est celle du pays du serveur,

                                    donc pour une solution adaptée au visiteur, choisissez de le faire en javascript qui récupère la date et l'heure depuis l'ordi. du visiteur.

                                    -
                                    Edité par zéroraf 27 juin 2018 à 17:15:13

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Quand tu veux, tu peux !
                                      12 août 2018 à 21:07:18

                                      Salut, HO ! Grand Julp tu es le meilleur !

                                      Et même si je me fait latter pour encore avoir posté sur du déterrage de topic, je m'en fout,

                                      je veux crier tout haut tes louanges !!

                                      Donc puisque je suis paresseux et que j'ai une bonne base bien remplie avec

                                      une entrée du genre 'date_jour' -> [type] DATE (quel andouille!) [note: désormais, que du timestamp!]

                                      et que pour des desseins futurs je dois réutiliser ma base d'abrutit,

                                      j'ai pu grâce à tes lumières parser ma bêtise en date formatée à sauce franchouillarde :

                                      comme ceci :

                                      setlocale(LC_TIME,'fr_FR','french','French_France.1252','fr_FR.ISO8859-1','fra');
                                      foreach($Arr_temp as $k => $v){
                                      
                                              $datefmt = new IntlDateFormatter('fr_FR', NULL, NULL, NULL, NULL, 'dd MMMM yyyy');
                                              
                                              // pour une date qui vient d'un champ DATE(TIME) de MySQL
                                              $date1 = date_create($v['date_jour']);
                                      
                                      
                                              // echo $datefmt->format($date1);
                                      
                                              $obj['arr_dates'][] = $datefmt->format($date1); // hé voilà du bon camembert !
                                              $obj['arr_visits'][] = intval($v['visites']);
                                      
                                      
                                      }

                                      Merci Julp, je pense te mentionner dans les contributeurs de mon petit système de boutique en ligne,

                                      à moins que tu ne daignes y contribuer (ce serait un honneur !) le projet est bien mûr mais un regard avisé comme le tien sur les logs serait un gage de sérieux ...

                                      Encore merci !

                                      P.S: pour ceux qui galèrent avec le formatage: (Et vu que j'ai sur-galéré pour trouver des infos à ce sujet...)

                                      dd MMMM yyyy -> 21 décembre 2017

                                      dd MMM yyyy -> 21 déc. 2017

                                      EEE dd MMM yyyy ->  dim. 21 déc. 2017

                                      EEEE dd MMM yyyy ->  dimanche 21 déc. 2017

                                      dd MM yyyy -> 21 12 2017

                                      (bon vous comprendrez la logique)

                                      comme dans mon code :  

                                      $obj['arr_dates'][] = ucwords($date_to_format->format($date)); // notez ucwords() devant

                                      ->Dimanche 21 Déc. 2017 ( Avec D-D !  hooo! )

                                      -
                                      Edité par zéroraf 12 août 2018 à 21:49:49

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Quand tu veux, tu peux !

                                      Afficher une date en français

                                      × 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