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

PHP & Base de données Discussion :

Traduction fonction date() [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Traduction fonction date()
    Bonjour à tous,

    J'utilise la fonction date() pour modifier l'affichage de dates présentes dans ma base de données. Cependant, les jours et les mois s'affichent en Anglais et non en Français.
    J'ai essayé plusieurs choses comme ceci :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale(LC_TIME, 'fr','fr_FR','fr_FR@euro','fr_FR.utf8','fr-FR','fra');

    ou encore ceci :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $dt=strftime(date ('l d F',$timeStringDate));

    Mais sans succès.
    Je précise aussi que je travail en local avec WAMP.

    Voici mon code :
    Code php : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    <table class="tabletournee" id="myTable">
     
                    <?php
     
                    try
                    {
                        $bdd = new PDO('mysql:host=localhost;dbname=medrano2017;charset=utf8', 'root', '');
                        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                    }
                    catch(Exception $e)
                    {
                        die('Erreur : '.$e->getMessage());
                    }
     
                        $reponse = $bdd->query('SELECT id_event,
                          id_tournee,
                          evenement.ville_event       AS ville,
                          evenement.lien_resa_event   AS lienresa,
                          evenement.adresse_event     AS adresse,
                          tournee.description_tournee AS descriptiontournee,
                          tournee.nom_tournee         AS nomtournee,
                          (SELECT MIN(s.dateheure_seance) FROM seance s WHERE s.id_event = evenement.id_event) AS premiereSeance,
                          (SELECT MAX(s.dateheure_seance) FROM seance s WHERE s.id_event = evenement.id_event) AS derniereSeance
                        FROM tournee
                        JOIN evenement USING(id_tournee)
                        ORDER BY premiereSeance,derniereSeance');
     
                        $compteur =0;
     
                        $datecourante = date('Y-m-d H:i:s');
     
                        while ($donnees = $reponse->fetch())
                        {
     
                        setlocale(LC_ALL, 'French', 'fr-FR.utf8','fra', 'fr-FR', 'fr_FR', 'fr', 'fr_FR@euro');
                        $datedebut = strftime("%d %B", strtotime($donnees['premiereSeance']));
                        $datefin = strftime("%d %B %Y", strtotime($donnees['derniereSeance']));
     
                        $reponse1 = $bdd->query("SELECT dateheure_seance AS seances FROM seance s WHERE s.id_event = '".$donnees['id_event']."'");
     
     
                        if( $donnees['derniereSeance'] >= $datecourante )
                        {
                    ?>
                        <tr class="infotournee infotournee<?php echo ($compteur%2); $compteur++; ?>">
                            <td id="event<?php echo $donnees['id_event']; ?>"><p style="color:white;" class="villetournee"><?php echo ''.$donnees['ville'].'';?></p> <p class="nomtournee"><?php echo ''.$donnees['nomtournee'].'';?></p></td>
                            <td><?php echo (strpos($datedebut,' '.$datefin))? 'Le '.utf8_encode($datedebut) : 'Du '.utf8_encode($datedebut).'<br/>au '.utf8_encode($datefin); ?></td>
                            <td><?php echo ''.$donnees['adresse'].'';?></td>
                            <td><a href="#spoiler<?php echo $donnees['id_event']; ?>" class="spoiler-link lienresa">PLUS D'INFOS</a><a class="lienresa" href="#">RESERVER</a></td>
                        </tr>
                        <tr>
                            <td colspan="4">
                                <div class="spoilers">
                                    <div class="spoiler" id="spoiler<?php echo $donnees['id_event']; ?>">
                                      <p>
                                      <?php 
                                      $dates=array();
                                      while ($donnees1 = $reponse1->fetch(PDO::FETCH_ASSOC)){
                                        $timeStringDate=strtotime($donnees1['seances']);
                                        $dt=strftime(date ('l d F',$timeStringDate));
                                        if(!array_key_exists($dt, $dates)){
                                          $dates[$dt]=array();
                                        }
                                        $dates[$dt][]=date ('H\hi',$timeStringDate);
                                      }
                                      $reponse1->closeCursor();
                                      foreach ($dates as $day => $hours) {
                                        echo $day . " à ";
                                        $last="";
                                        if(count($hours)>1){
                                          $last=" et ".array_pop($hours).".";
                                        }
                                        echo join(", ",$hours).$last."<br>";
                                      }
                                      ?>
                                      </p>
                                    </div>
                                </div>
                            </td>
                        </tr>
     
                    <?php
                        }
                        }
                            $reponse->closeCursor();
                    ?>
            </table>

    Merci à tous d'avance !

  2. #2
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Salut, tu devrais regarder au niveau de la classe IntDateFormatter http://php.net/manual/fr/class.intldateformatter.php
    Le bienfait n'est jamais perdu

  3. #3
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Le formatage est deja effectif, le soucis et que l'affichage se fait en Anglais. Voici un résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Thursday 13 July à 14h30, 18h00 et 20h30.
    Friday 14 July à 14h30, 18h00 et 20h30.

  4. #4
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Testé sur uwamp. php7.1 (je ne sais pas si ça change grande chose) A adapter suivant ton script
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    setlocale(LC_TIME, 'fr_FR.utf8', 'fra');
    $date = strftime("%A %d %B %Y", strtotime('2015-11-25 12:40'));
    echo $date; //mercredi 25 novembre 2015

    Le problème avec setlocale c'est qu'elle dépend des locales installées dans le système dans lequel ton serveur est.. Tu devrais vraiment jeter un coup d’œil à IntlDateFormatter
    Le bienfait n'est jamais perdu

  5. #5
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Willy_k Voir le message
    Testé sur uwamp. php7.1 (je ne sais pas si ça change grande chose) A adapter suivant ton script
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    setlocale(LC_TIME, 'fr_FR.utf8', 'fra');
    $date = strftime("%A %d %B %Y", strtotime('2015-11-25 12:40'));
    echo $date; //mercredi 25 novembre 2015

    Le problème avec setlocale c'est qu'elle dépend des locales installées dans le système dans lequel ton serveur est.. Tu devrais vraiment jeter un coup d’œil à IntlDateFormatter
    Alors j'avais déjà essayé avec ce bout de code, je n'y suis pas arrivé... En effet, je suis obligé de décomposé mes dates en 2 parties pour différencier les dates des horaires pour mon affichage.
    Voici la partie du code concernée :

    Code php : 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
    24
     
    setlocale(LC_ALL, 'French', 'fr-FR.utf8','fra', 'fr-FR', 'fr_FR', 'fr', 'fr_FR@euro');
    $dates=array();
    while ($donnees1 = $reponse1->fetch(PDO::FETCH_ASSOC))
    {
           $timeStringDate=strtotime($donnees1['seances']);
           $dt=date("l d F",$timeStringDate);
           if(!array_key_exists($dt, $dates))
           {
                 $dates[$dt]=array();
           }
           $dates[$dt][]=date ('H\hi',$timeStringDate);
    }
    $reponse1->closeCursor();
    foreach ($dates as $day => $hours) 
    {
       echo $day . " à ";
       $last="";
       if(count($hours)>1)
       {
           $last=" et ".array_pop($hours).".";
        }
        echo join(", ",$hours).$last."<br>";
    }

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Willy_k a utilisé la fonction "strftime" dans son exemple : http://php.net/strftime

  7. #7
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    date("l d F",...); affiche la date en anglais normal (http://php.net/manual/fr/function.date.php, il est dit que l affiche le jour de la semaine textuelle en anglais, de même que F pour le mois), donc indépendant de setlocale..
    Le bienfait n'est jamais perdu

  8. #8
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Alors j'ai essayé de remplacer cette ligne :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $dt=date("l d F",$timeStringDate);
    Par celle la:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $dt = strftime("%A %B %G", strtotime($timeStringDate));

    Mais ça me fait cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Warning: array_key_exists(): The first argument should be either a string or an integer

  9. #9
    Membre éprouvé Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 540
    Points : 1 067
    Points
    1 067
    Par défaut
    Apparemment $dt renvoie false, format non reconnu par Windows et/ou ta version de PHP? Et si tu remplaçais %G par %Y.
    Et puisque tu as déjà fait un strtotime plus haut, ça ne ferait pas un double emploi strtotime($timeStringDate) ?
    Le bienfait n'est jamais perdu

  10. #10
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Ok c'est bon ! Voici le code utilisé :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $dt = strftime("%A %d %B",$timeStringDate);

    Merci de votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Dates] Fonction date
    Par dafalri dans le forum Langage
    Réponses: 18
    Dernier message: 13/12/2005, 11h27
  2. Question de base sur l'utilisation de la fonction date()
    Par deaven dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/12/2005, 15h33
  3. Som dans form continu en fonction date selectionée dans form
    Par samlepiratepaddy dans le forum Access
    Réponses: 3
    Dernier message: 26/09/2005, 13h05
  4. Fonction Date
    Par marivi dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/08/2005, 16h30
  5. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33

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