Partage
  • Partager sur Facebook
  • Partager sur Twitter

[PHP]paramètre setlocale

Sujet résolu
    21 février 2017 à 14:21:31

    Bonjour, 

    J'ai développé une page et j'écris le code suivant :

    setlocale(LC_TIME, "french");

    Sur mon ordinateur, ça marche, mais sur mon portable, en essayant avec l'application "Serveur pour PHP", ça retourne un warning :

    Warning: setlocale() expects parameter 1 to be integer

    Est-ce que vous pouvez m'aider ? Je n'ai rien trouvé sur internet à ce sujet. 

    Merci. 

    -
    Edité par me_moi 21 février 2017 à 14:39:53

    • Partager sur Facebook
    • Partager sur Twitter
      21 février 2017 à 14:25:03

      Pas le vrai code ? En réalité c'est setlocale('LC_TIME', "french"); au lieu de setlocale(LC_TIME, "french"); ?

      Sinon c'est que locale.h n'a pas été trouvé lorsque PHP a été compilé donc la constante LC_TIME n'existe pas et ça devrait avant lever une Notice: Use of undefined constant LC_TIME - assumed 'LC_TIME' (si l'error_reporting comprend les notices)

      -
      Edité par julp 21 février 2017 à 14:35:55

      • Partager sur Facebook
      • Partager sur Twitter
        21 février 2017 à 14:26:22

        A priori ton erreur viens du fait que la variable LC_TIME n'est pas de type integer. Est ce qu'elle existe bien? Tente une conversion de la valeur. Je ne connais pas l'application "Serveur pour PHP".
        • Partager sur Facebook
        • Partager sur Twitter
          21 février 2017 à 14:29:51

          J'ai téléchargé cette application dans play store

          Merci pour vos réponses 

          @julp ta solution n'a pas marché 

          @duflotf j'ai essayé le transtypage et ça marche

          setlocale( (integer) LC_TIME, "french");

          Mais la date s'affiche en anglais au lieu de s'afficher en français, alors que sur mon ordinateur, ça s'affiche bien en français.

          Voici le code :

          setlocale( (integer) LC_TIME, "french");
          
          $dateAujourdhui = utf8_encode( ucwords(strftime ("%A %d %B %Y", time()) ) );

          Ce n'est pas mon code, je l'ai trouvé sur internet, mais j'ai quand même pris le temps de bien regarder la documentation PHP pour savoir ce que chaque fonction (ou autre) est censé faire. Donc je comprend ce code. Mais je ne vois pas pourquoi ça s'affiche en anglais sur mon portable.

          -
          Edité par me_moi 21 février 2017 à 14:46:51

          • Partager sur Facebook
          • Partager sur Twitter
            21 février 2017 à 17:16:03

            Salut !

            Tu travailles avec quelle version de PHP ? Parce que tu pourrais avoir une alternative qui devrait poser moins de problèmes.

            • Partager sur Facebook
            • Partager sur Twitter
              21 février 2017 à 17:27:59

              var_dump(LC_TIME); ? Il faut croire qu'elle n'est pas définie (auquel cas la cast en int donnerait 0, ce qui a peu de chances de fonctionner - sur FreeBSD, à titre indicatif (et pas d'autre OS sous la main), elle vaut 5).

              De toute façon, ouais, les locales systèmes c'est une vraie plaie (au sens pas portable/imprévisible), si tu le peux, tu ferais vraiment mieux d'utiliser la classe intlDateFormatter : c'est portable avec un résultat toujours en UTF-8.

              -
              Edité par julp 21 février 2017 à 17:46:54

              • Partager sur Facebook
              • Partager sur Twitter
                21 février 2017 à 19:16:47

                J'ai mis mon code en commentaires :

                /*setlocale( (integer) LC_TIME, "french");
                
                $dateAujourdhui = utf8_encode( ucwords(strftime ("%A %d %B %Y", time()) ) );*/

                et J'ai essayé ça à la place :

                $dateAujourdhui = datefmt_create("fr_FR", intlDateFormatter::FULL, intlDateFormatter::NONE,"Europe/Paris",IntlDateFormatter::GREGORIAN);
                
                echo datefmt_format($dateAujourdhui, 0);

                Mais ça affiche "jeudi 1 janvier 1970". Comment faire à partir de ça pour afficher la date d'aujourd'hui ?

                Et je ne comprend pas à quoi correspond le 0 entre parenthèses lors de l'affichage...

                Merci pour votre aide.

                -
                Edité par me_moi 21 février 2017 à 19:17:50

                • Partager sur Facebook
                • Partager sur Twitter
                  21 février 2017 à 19:23:04

                  Remplace 0 par date_create() ou new DateTime (ou time()).

                  Et je ne comprend pas à quoi correspond le 0 entre parenthèses lors de l'affichage...

                  0 c'est un timestamp Unix : le nombre de secondes écoulées depuis le 1er Janvier 1970 minuit UTC ? Tu parles d'autre chose ?

                  -
                  Edité par julp 21 février 2017 à 19:30:39

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 février 2017 à 20:48:39

                    Merci, ça marche, j'ai j'ai bien la date d'aujourd'hui. 

                    echo ucwords( datefmt_format($dateAujourdhui, new DateTime) );

                    -
                    Edité par me_moi 21 février 2017 à 20:49:15

                    • Partager sur Facebook
                    • Partager sur Twitter

                    [PHP]paramètre setlocale

                    × 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