Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250

    consiglio su calcolo età

    salve..
    ho fatto una funzione x calcolare l'eta' di un utente specifico.
    Nel database l'età viene archiviata con un campo DATE (YYYY-MM-DD)

    vorrei sapere se devo fare così:

    Codice PHP:
    function eta($data_nascita){
        
    $s="SELECT *, YEAR(NOW()) - YEAR(data_nascita) as eta from utenti WHERE data_nascita='$data_nascita'";
        
    $r=mysql_query($s);
        
    $d=mysql_fetch_array($r);
        return 
    $d['eta'];

    oppure così?

    Codice PHP:
    function eta($data){
        
    $anno_nascita substr($data,0,4);
        
    $anno = (date("Y"));  
        
    $eta = ($anno-$anno_nascita);
        return 
    $eta;

    Non mi convince tanto il mio script... :master:

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select *,
    year(curdate()) - year(data_nascita) - (right(curdate(),5) < right(data_nascita,5)) as eta
    from utenti


    edit. Oppure

    codice:
    select *,floor(datediff(curdate(),data_nascita)/365.25) as eta
    from utenti

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250
    ciao Nicola!
    grazie del consiglio.. ho provato entrambe le soluzioni..
    la prima mi estrae come risultato un numero a 4 cifre (2009)

    la seconda soluzione invece mi da NULL


    Il campo data_nascita è un campo date
    0000-00-00

  4. #4
    codice:
    SELECT *,
    if(date_format(data_nascita, '%m%d') <= date_format(now(), '%m%d'),
    year(now()) - year(data_nascita), year(now()) - year(data_nascita) -1) as eta
    FROM utenti 
    WHERE ... what_you_like
    se mese/giorno della data nascita e' maggiore del mese/giorno data corrente non hai ancora compiuto l'ultimo anno che deriva da anno_corrente - anno_nascita quindi avrai un -1

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    250
    Grazie!!!

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Scusami, la seconda query che ti ho scritto è soggetta ad alcuni errori di arrotondamento.

    esempio

    codice:
    select floor(datediff(curdate(),'2004-08-22')/365.25) as eta # 4 anzichè 5
    La prima invece è corretta. Forse ci sono problemi dovuti alle parentesi

    codice:
    select (year(curdate()) - year('2004-08-22')) - (right(curdate(),5) < right('2004-08-22',5)) as eta # 5
    comunque Piero come sempre ha già risolto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.