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 :

Afficher mes dates MySQL en format "long" francophone [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 19
    Points : 16
    Points
    16
    Par défaut Afficher mes dates MySQL en format "long" francophone
    Bonjour,

    Voici ce que je cherche à faire. Dans une table MySQL j'ai un champs au format DATE. Les dates qui y sont inscrites sont au format aaaa-mm-jj.

    Si, par exemple, mon champs contient la date '2008-03-21', comment afficher sur ma page web '21 mars 2008' ?

    Merci pour vos réponses.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Points : 631
    Points
    631
    Par défaut
    Bonsoir,
    utilisez la fonction MySQL UNIX_TIMESTAMP(), comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT UNIX_TIMESTAMP(`champ_date`) FROM `votre_table`;
    Puis une fois le timestamp Unix récupéré, utilisez cette fonction :

    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
    <?php
     
      function frenchDate($unix)
      {
        $mois = array(1=>'janvier', 'février', 'mars', 'avril', 'mai', 'juin', 
         'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre');
     
        list($j, $m, $aaaa) = explode('-', date('j-n-Y', $unix));
     
        if ($j == 1) $j .= 'er';
     
        return $j.' '.$mois[$m].' '.$aaaa;  
      }
     
      echo frenchDate(time());  // retourne 1er mars 2008
     
    ?>
    Cordialement,
    DaRiaN.

  3. #3
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Je suis d'accord avec ton code DaRiaN mais je me permets de proposer ceci :
    Comment afficher la date du jour en français ? qui contient une solution plus rapide pour la transformation de la date en français.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Points : 631
    Points
    631
    Par défaut
    C'est vrai... peut-être qu'un jour je finirai par perdre les habitudes prisent dans mes scripts PHP3.

    Merci de m'avoir rafraîchi la mémoire.

  5. #5
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Un grand merci à tous les deux. Grâce à vos explications j'ai voulu aller un peu plus loin et afficher le nom du jour mais dans ce code, j'ai un problème avec les mois. Il affiche systématiquement le mois de mars dans la date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	$query = mysql_query("SELECT *, DATE_FORMAT(date, '%w/%d/%n/%Y') AS date_fr FROM date_test ORDER BY date ASC");
    	while ($data = mysql_fetch_array($query))
    	{
     
    	$nom_jour_fr = array("dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi");
    	$mois_fr = Array("", "janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", 
            "septembre", "octobre", "novembre", "décembre");
     
    	list($nom_jour, $jour, $mois, $annee) = explode('/', date($data['date_fr']));
     
    	echo $nom_jour_fr[$nom_jour].' '.$jour.' '.$mois_fr[$mois].' '.$annee.'<br />'; 
    	}
    Affiche :

    vendredi 29 mars 2008
    lundi 17 mars 2008
    mardi 24 mars 2008
    jeudi 21 mars 2008

    alors qu'il devrait afficher :

    vendredi 29 janvier 2008
    lundi 17 juin 2008
    mardi 24 juillet 2008
    jeudi 21 août 2008

    Merci d'avance pour votre aide.

  6. #6
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    J'ai trouvé une solution mais je ne sais pas si c'est meilleure, si vous avez un avis sur ce code, n'hésitez pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	$query = mysql_query("SELECT *, DATE_FORMAT(date, '%w/%d/%m/%Y') AS date_fr FROM date_test ORDER BY date ASC");
    	while ($data = mysql_fetch_array($query))
    	{
     
    	$nom_jour_fr = array("dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi");
    	$mois_fr = array("01"=>"janvier", "02"=>"février", "03"=>"mars", "04"=>"avril", "05"=>"mai", "06"=>"juin", "07"=>"juillet", "08"=>"août", 
            "09"=>"septembre", "10"=>"octobre", "11"=>"novembre", "12"=>"décembre");
     
    	list($nom_jour, $jour, $mois, $annee) = explode('/', date($data['date_fr']));
     
    	echo $nom_jour_fr[$nom_jour].' '.$jour.' '.$mois_fr[$mois].' '.$annee.'<br />'; 
    	}

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Points : 631
    Points
    631
    Par défaut
    Vous ne préférez pas la méthode de Kerod?

    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
    <?php
     
      setlocale(LC_TIME, 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
     
      $query = 'SELECT UNIX_TIMESTAMP(`date`) AS `secondes` FROM `date_test` ORDER BY `secondes`';
     
      if
      (
        !mysql_connect('localhost', 'darian', 'mdp') ||  
        !mysql_select_db('base')                     ||
        !$result = mysql_query($query)	
      )
      die(mysql_error());
     
      mysql_close();
     
      while ($array = mysql_fetch_array($result))
       echo strftime('%A %d %B %Y', $array['secondes']).'<br />';
     
      // affiche samedi 01 mars 2008
     
    ?>
    Du reste, si vous voulez continuer à utiliser votre code, évitez de définir les array $nom_jour_fr et $mois_fr dans une boucle, vous perdez en performance. Placez-les en dehors.

  8. #8
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Effectivement c'est encore mieux, merci de l'avoir adapté avec mes valeurs. Voici le script final si cela peut aider qqun.
    On entre la date en français, il l'inscrit la date au format DATE dans la DB et ensuite il affiche les dates avec le nom du jour.


    Merci encore pour ton aide précieuse.

    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
    24
    25
     
    <?php
    	include("../cnx.php");
     
    		if (isset($_POST['date']))
    		{
    		$date = $_POST['date'];
    		mysql_query("INSERT INTO date_test SET date = STR_TO_DATE('$date', '%d/%m/%Y')");
     
     
    	setlocale(LC_TIME, 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
     	$query = 'SELECT UNIX_TIMESTAMP(`date`) AS `secondes` FROM `date_test` ORDER BY `secondes`';
     
     	$result = mysql_query($query);
      	while ($array = mysql_fetch_array($result))
    	{
    	echo strftime('%A %d %B %Y', $array['secondes']).'<br />';
     	}
    	}
    ?>
     
    <form action="date SQL5.php" method="post">
      <input name="date" size="10" />
      </br></br><input type="submit" value="Add" />
    </form>

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

Discussions similaires

  1. [Debutant] Afficher une date avec un format short
    Par lilou77 dans le forum BIRT
    Réponses: 12
    Dernier message: 11/01/2007, 09h25
  2. Comment convertir une date MySQL au format francophone ?
    Par bilane dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 11/09/2006, 10h44
  3. [SGBD] Convertir une donnée Date MYSQL en format Francais
    Par hillairet dans le forum Débuter
    Réponses: 4
    Dernier message: 28/09/2005, 15h06

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