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 :

D'un format date anglais au format français et calcule d'âge


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef du projet web
    Inscrit en
    Août 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef du projet web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 18
    Points : 14
    Points
    14
    Par défaut D'un format date anglais au format français et calcule d'âge
    Bonjour,
    Je cherche à convertir ma variable 'date_naissance' au format de date français et calculer l'âge puis l'affiche en html.
    la variable affiche 0 et une erreur comme "a non well formed numeric value encountered".
    Je ne sais pas pourquoi Age prend la valeur de 0 alors qu'un peu plus haut avec un var_damp() je vois bien que la variable elle a la date en format français d-m-Y.

    Je vous remercie d'avance.

    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
    26
    27
    28
    <?php  $sql =  " SELECT `nom_cochon`, `nom_pere`, `nom_mere`, `date_naissance` FROM `cochon_infos`"; ?>
     
     
     
    <?php 
     
     
     
    // Calcule l'âge à partir d'une date de naissance jj/mm/aaaa
     
    function Age($date_naiss)
        {
        $am = explode('/', $date_naiss);
        $an = explode('/', date('d/m/Y'));
     
        if(($am[1] < $an[1]) || (($am[1] == $an[1]) && ($am[0] <= $an[0])))
        return $an[2] - $am[2];
     
        return $an[2] - $am[2] - 1;
        }
     
     
    $datenaiss = '07/06/1989'; // test
     
    $age = Age($datenaiss); //test
    echo $age; //test
     
    ?>
    Code html : 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
    <div class="row">
        <?php foreach($pdo->query($sql) as $row) { ?>
            <div class="col-md-3 col-sm-6">
     
                <div class="product-grid6">
                    <div class="product-image6">
                        <a href="#">
                            <img class="pic-1" src="images/katy-cochon.png">
                        </a>
                    </div>
                    <div class="product-content">
                        <h3 class="title"><a href="#"><?php print $row['nom_cochon']; ?></a></h3>
                        <?php 
                       
                          $dateNaissCochon = $row['date_naissance']; // Y-m-d
     
                          //inverser la date (format français)
                          list($date, $time) = explode(" ", $dateNaissCochon);
                          list($year, $month, $day) = explode("-", $date);
                          list($hour, $min, $sec) = explode(":", $time);
                          echo "date format francais ".$dateNaissCochon = "$day/$month/$year $time". "</p>";
     
                          //calculer l'age
                         echo "var_damp ->";  var_dump($dateNaissCochon);
                         $datenaiss = $dateNaissCochon; // affiche bien d/m/Y
     
                         $age = Age($dateNaissCochon);
                         echo  "Age : ?" . $age . "<br>"; //résultat "Age : 0", erreur : a non well formed numeric value encountered
     
     
                         
                        
                          
                        ?>
     
                            <span class="product-shipping">Age : <?php print $dateNaissCochon; ?></span><br> // format français d-m-Y
                            <span class="product-shipping">Nom du père : <?php print $row['nom_cochon']; ?></span> <br>
                            <span class="product-shipping">Nom de la mère : <?php print $row['nom_mere']; ?></span><br>
     
     
     
                    </div>
                    <ul class="social">
                        <li><a href="" data-tip="Contact"><i class="fa fa-search"></i></a></li>
                        <li><a href="" data-tip="Détails"><i class="fa fa-shopping-bag"></i></a></li>   
                    </ul>
                </div>
            </div>
            <?php }?>

  2. #2
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Sauf erreur de ma page, je ne vois pas votre premier code. Ce qui s'affiche :
    $age

    Bonne journée

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chef du projet web
    Inscrit en
    Août 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef du projet web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    C'est dans la première partie du code, ligne 27.

    C'est à dire quand je rentre un age manuellement il calcule bien l'age à partir d'une date. Mais quand je le fais passer d'une variable qui vient de la base de donnée, après l'avoir converti au format francais, j'ai "age = 0".

    Je pense que lors de la conversion il y a erreur, et la fonction qui calcule l'age ne prend pas les bons paramètres (d-m-y).

    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
    26
    27
    28
    29
    30
     
     
    <?php  $sql =  " SELECT `nom_cochon`, `nom_pere`, `nom_mere`, `date_naissance` FROM `cochon_infos`"; ?>
     
     
     
    <?php 
     
     
     
    // Calcule l'âge à partir d'une date de naissance jj/mm/aaaa
     
    function Age($date_naiss)
        {
        $am = explode('/', $date_naiss);
        $an = explode('/', date('d/m/Y'));
     
        if(($am[1] < $an[1]) || (($am[1] == $an[1]) && ($am[0] <= $an[0])))
        return $an[2] - $am[2];
     
        return $an[2] - $am[2] - 1;
        }
     
     
    $datenaiss = '07/06/1989'; // test
     
    $age = Age($datenaiss); //test
    echo $age; //test : ici j'affiche bien l'age
     
    ?>

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Passons à coté du fait que stocker la date dans un format français n'est pas correct. Le standard c'est Y-m-d.

    Pour ton calcul , suffit de faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $date = '07/06/1989';
    $birth= DateTime::createFromFormat ('d/m/Y',$date); // ou alors simplement new DateTime($date); Si format standard
    $now = new DateTime();
     
    $age = $now->diff($birth)->y;
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Si date_naissance est un champ de type DATE en base, je pense qu'il vaut mieux faire les calculs directement avec la valeur récupérée dans la requête (qui va avoir un format standard Y-m-d) et ensuite la formater pour l’afficher.

    Et dans tous les cas, il vaut mieux passer par les fonctions de date comme te le conseille grunk pour manipuler les dates.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre à l'essai
    Homme Profil pro
    Chef du projet web
    Inscrit en
    Août 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef du projet web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Oui Celira, pour vous mettre dans le contexte, l'idée du projet c'est de donner à un cochons une dates de naissances (l'afficher) et une date de décès, une fois le cochon est mort il disparait de la liste (page liste cochons).
    J'ai voulu afficher le bon format sur la fiche de chaque cochon, Grunk, je savais pas que le format francais est incorrect, je te remercie pour l'info .
    J'ai pensé aussi de renseigner juste un entier de nombre de jours dans ma base et laisser php faire le calcule.

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

Discussions similaires

  1. Format date (anglais / français)
    Par delavega dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/01/2012, 14h39
  2. Date format Français copié format anglais
    Par Shuki dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/10/2009, 07h27
  3. format date anglais et français en vba
    Par triaguae dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/04/2008, 12h13
  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