• User Attivo

    Calcolo eta tramite campo

    Salve a tutti,

    piccolo aiuto :smile5:

    ho questa funzione per calcolare l'eta di una persona

    [PHP]<?php

    $datanascita = "19-10-1964";

    $dateOfBirth = "$datanascita";
    $today = date("Y-m-d");
    $diff = date_diff(date_create($dateOfBirth), date_create($today));

    echo 'Sei nato il '.$dateOfBirth ;
    echo " ";
    echo 'e hai ' .$diff->format('%y');
    echo " ";
    echo 'anni';
    ?>
    [/PHP]

    io vorrei che tramite il prelievo del campo birthday mi visualizza il risultato',
    ho provato ma viene visualizzato un errore 😞

    Soluzione?

    [PHP]<?php

    $datanascita = "birthday";

    $dateOfBirth = "$datanascita";
    $today = date("Y-m-d");
    $diff = date_diff(date_create($dateOfBirth), date_create($today));

    echo 'Sei nato il '.$dateOfBirth ;
    echo " ";
    echo 'e hai ' .$diff->format('%y');
    echo " ";
    echo 'anni';
    ?>
    [/PHP]


  • User Attivo

    Ciao, se scrivi

    [PHP]
    $datanascita = "birthday";
    [/PHP]

    con gli apici, la variabile $datanascita viene valorizzata con i caratteri della parola birthday invece della data nel formato AAAA-MM-GG, come nel primo esempio.

    Probabilmente volevi scrivere $birthday, senza apici.

    Credo siano inutili anche gli apici in

    [PHP]
    $dateOfBirth = "$datanascita";
    [/PHP]


  • User Attivo

    Ciao altraSoluzione,**

    birthday** e' il campo date memorizzato nel database mysql

    [PHP]<p class="bioheading">Birthday</p><p class="biodata"><?php echo $row['birthday'];?></p>[/PHP]

    in questo caso mi restituisce **1964-10-19 che sarebbe la data di nascita, io vorrei visualizzare accanto anch l'eta (che sarebbe 54 in questo esempio)

    naturalmente ci sono molte date di nascita, e per ognuno si deve calcolare l'eta' giusta

    **


  • User Attivo

    @Alex_2019 said:

    Ciao altraSoluzione,**

    birthday** e' il campo date memorizzato nel database mysql

    [PHP]<p class="bioheading">Birthday</p><p class="biodata"><?php echo $row['birthday'];?></p>[/PHP]

    in questo caso mi restituisce **1964-10-19 che sarebbe la data di nascita, io vorrei visualizzare accanto anch l'eta(che sarebbe 54 in questo esempio)

    naturalmente ci sono molte date di nascita, e per ognuno si deve calcolare l'eta' giusta

    **

    Ciao,
    quindi il codice corretto, all'interno del loop, dovrebbe essere:

    [PHP]
    <?php
    $datanascita = $row['birthday'];

    $dateOfBirth = $datanascita;
    $today = date("Y-m-d");
    $diff = date_diff(date_create($dateOfBirth), date_create($today));

    echo 'Sei nato il '.$dateOfBirth ;
    echo " ";
    echo 'e hai ' .$diff->format('%y');
    echo " ";
    echo 'anni';
    ?>
    [/PHP]

    Anzi, volendo puoi eliminare una riga:

    [PHP]
    <?php
    $dateOfBirth = $row['birthday'];
    $today = date("Y-m-d");
    $diff = date_diff(date_create($dateOfBirth), date_create($today));

    echo 'Sei nato il '.$dateOfBirth ;
    echo " ";
    echo 'e hai ' .$diff->format('%y');
    echo " ";
    echo 'anni';
    ?>
    [/PHP]


  • User Attivo

    perfetto funziona,

    vorrei visualizzare l'eta' a fianco della data di nascita, questa mi da errore

    [PHP]<p class="bioheading">Birthday</p><p class="biodata"><?php echo $row['birthday'];?></p><?php echo ' ' .$diff->format('%y') ''.anni; ?>[/PHP]

    cosi,

    1964-10-19 - 54 anni


  • User Attivo

    ho aggiustato il codice, ma vorrei tutto sulla stessa riga :rollo:

    [PHP]<p class="bioheading">Birthday</p><p class="biodata"><?php echo $row['birthday'];?></p><?php echo ' ' .$diff->format('%y'), " ", "anni"; ?>[/PHP]

    adesso mi visualizza questo

    BIRTHDAY
    1964-10-19
    54 anni


  • User Attivo

    Risolto 🙂

    c'era un eco in piu' 😄

    [PHP]<p class="bioheading">Birthday</p><p class="biodata"><?php echo $row['birthday'], " ", "-" , "<b>", ' ' .$diff->format('%y'), "</b>", " ", "anni" ; ?></p>
    [/PHP]

    Grazie [altraSoluzione

    :smile5:
    ](http://www.giorgiotave.it/forum/members/altrasoluzione.html)


  • User Attivo

    vorrei perfezionarlo, ho aggiunto il colore red,

    quello che vorrei ottenere e il cambio di colore in base all'eta',

    esempio:

    da 20 in su verde
    da 30 in su blu
    da 40 in su arancione
    da 50 in su rosso

    [PHP]<?php

    $datanascita = $row['birthday'];

    $dateOfBirth = $datanascita;
    $today = date("Y-m-d");
    $diff = date_diff(date_create($dateOfBirth), date_create($today));

    ?> [/PHP]

    [PHP]<<p class="bioheading">Birthday</p><p class="biodata"><?php echo $row['birthday'], " ", "-" , "<b>", '<font color="#FF0000">',' ' .$diff->format('%y'), '</font>', "</b>", " ", "anni" ; ?></p> [/PHP]

    adesso visualizzo cosi

    1964-10-19 -** 54** anni


  • User Attivo

    @Alex_2019 said:

    vorrei perfezionarlo, ho aggiunto il colore red,

    quello che vorrei ottenere e il cambio di colore in base all'eta',

    Non ho tempo per scrivere il codice intero ma puoi utilizzare il comando switch (https://www.php.net/manual/en/control-structures.switch.php) per stabilire diversi range e modificare una variabile che contiene il codice colore (o per modificare una classe CSS) di conseguenza.


  • Moderatore

    Esattamente come ti hanno suggerito, devi utilizzare le condizioni in PHP.
    Puoi usare IF ed ELSE oppure puoi utilizzare lo switch.
    Di seguito il codice, ma dovresti apprendere cosa e come ho fatto, altrimenti resta tutto inutile e fine a se stesso.

    [PHP]
    <?php

    $datanascita = $row['birthday'];

    $dateOfBirth = $datanascita;
    $today = date("Y-m-d");
    $diff = date_diff(date_create($dateOfBirth), date_create($today));

    ?>

    <?php
    $a = $diff->format('%y');

    switch($a) {
    case $a >= 20 && $a < 30 :
    $anni = '<font color="green">' . $a . '</font>';
    break;
    case $a >= 30 && $a < 40 :
    $anni = '<font color="blue">' . $a . '</font>';
    break;
    case $a >= 40 && $a < 50 :
    $anni = '<font color="orange">' . $a . '</font>';
    break;
    case $a >= 50 :
    $anni = '<font color="red">' . $a . '</font>';
    break;
    default :
    $anni = '';
    }

    ?>
    <p class="bioheading">
    Birthday
    </p>
    <p class="biodata">
    <?php echo $row['birthday'];?> - <b><?php echo $anni; ?></b> anni
    </p>
    [/PHP]
    Inoltre, dovresti anche imparare ad indentare il codice. Resta di più facile lettura e modifica, e, impara anche l'utilizzo di "echo" o "print" e le loro differenze, anche se minimi. Chiudo con: il codice HTML è sempre bene scriverlo al di fuori di PHP, per una maggiore lettura e modifica dello stesso.


  • User Attivo

    Grazie Stefano 🙂

    avevo trovato qualche suggerimento su StackOverflow, ma non riuscivo a capire come impostare i case, adesso mi hai chiarito, ;)per indentare come fare? :bho:
    io utilizzo Notepad++ (abbastanza per me)


  • User Attivo

    questo non riesco a risolverlo, si tratta di calcolare la differenza di 3 campi

    birthday start e today

    esempio:

    birthday: 1994
    start: 2014
    today: date

    inizio carriera a 20 anni

    [PHP]<p class="bioheading">Birthday</p><p class="biodata"><?php echo $row['birthday'];?></p>[/PHP]

    [PHP]<p class="bioheading">Start</p><p class="biodata"><?php echo $row['start']; ?></p>[/PHP]

    questo e' il codice precedente che calcola l'eta', ma non capisco come adattarlo,

    [PHP]
    <?php
    $datanascita = $row['birthday'];

    $dateOfBirth = $datanascita;
    $today = date("Y-m-d");
    $diff = date_diff(date_create($dateOfBirth), date_create($today));

    ?>
    [/PHP]


  • User Attivo

    c'e' un problema con il calcolo dell'eta', se birthday e' vuoto mi restituisce 0000-00-00 e l'eta' con l'anno corrente **2019 :bho:

    image
    **


  • User Attivo

    @Alex_2019 said:

    questo non riesco a risolverlo, si tratta di calcolare la differenza di 3 campi

    birthday start e today

    esempio:

    birthday: 1994
    start: 2014
    today: date

    inizio carriera a 20 anni

    [PHP]<p class="bioheading">Birthday</p><p class="biodata"><?php echo $row['birthday'];?></p>[/PHP]

    [PHP]<p class="bioheading">Start</p><p class="biodata"><?php echo $row['start']; ?></p>[/PHP]

    questo e' il codice precedente che calcola l'eta', ma non capisco come adattarlo,

    [PHP]
    <?php
    $datanascita = $row['birthday'];

    $dateOfBirth = $datanascita;
    $today = date("Y-m-d");
    $diff = date_diff(date_create($dateOfBirth), date_create($today));

    ?>
    [/PHP]

    Stefano, piccolo aiuto 🙂


  • User Attivo

    piccola modifica, il campo start e' year (4), non date

    si tratta di calcolare la differenza tra birthday campo birthday tipo (date 0000-00-00) e start tipo (year 0000)


  • User Attivo

    Risolto anche questo 🙂

    [PHP]<?php

    // calcolo differenza anni tra birthday e start, utilizzata la function.substr
    $var1 = $row['birthday'];
    $var2 = $row ['start'];

    ?>[/PHP]

    [PHP]<?php echo $var2 - substr($var1, 0, 4); ?>[/PHP]