• User Attivo

    @Magicale said:

    Lo script funziona correttamente a parte il calcolare l'età in negativo. Dovresti invertire la differenza.

    Fare:
    [php]
    $dataodierna=date ("d-m-Y");
    strtotime("$dataodierna")
    [/php]è una "complicazione affari semplici"... equivale a richiamare la sola funzione time();
    [php]
    $differenza=(time() - strtotime("$datanascita"))/(31536000);
    [/php]Per quanto riguarda il risultato errato, verifica che le tre variabili contengano effettivamente i dati da te scritti in commento.
    strtotime() cerca di interpretare la tua stringa per trasformarla in un Unix timestamp.
    Per evitare eventuali errate interpretazioni della stringa da parte di strtotime(), come ti ha consigliato Thedarkita, sarebbe meglio usare mktime()
    [php]
    mktime(0,0,0,$str_giorno,$str_mese,$str_anno)
    [/php]Alessandro
    Allora...ho fatto cosi'

    [PHP]
    $datanascita="$str_giorno-$str_mese-$str_anno";

    $differenza=(strtotime("$datanascita") - time())/(31536000);
    echo "$differenza";
    [/PHP]
    in questo caso mi da 26.3927778729 quindi pare che funzioni...solo che non vorrei tutti quei numeri dopo il 26...
    invece facendo cosi'
    [PHP]
    $datanascita="$str_giorno-$str_mese-$str_anno";

    $differenza=(strtotime("$datanascita") - mktime(0,0,0,$str_giorno,$str_mese,$str_anno))/(31536000);
    echo "$differenza";
    [/PHP]

    mi da 51.2


  • User Attivo

    mktime() devi usarlo al posto di strtotime().

    La differenza corretta è:
    [php]
    $differenza=(time() - mktime(0,0,0,$str_giorno,$str_mese,$str_anno))/(31536000);
    [/php]

    Per avere solo gli anni interi puoi utilizzare la funzione intval()
    [php]
    $differenza=intval((time() - mktime(0,0,0,$str_giorno,$str_mese,$str_anno))/(31536000));
    [/php]

    o forzare il risultato ad un intero con l'operatore di type casting (int)
    [php]
    $differenza=(int)(time() - mktime(0,0,0,$str_giorno,$str_mese,$str_anno))/(31536000);
    [/php]

    oppure arrotondare per difetto con la funzione matematica floor();
    (in questo caso il risultato sarà ancora di tipo float)
    [php]
    $differenza=floor((time() - mktime(0,0,0,$str_giorno,$str_mese,$str_anno))/(31536000));
    [/php]

    La migliore è la prima soluzione

    Alessandro


  • User Attivo

    OK,ho usato questa soluzione
    [PHP]
    $differenza=intval((time() - mktime(0,0,0,$str_giorno,$str_mese,$str_anno))/(31536000));
    [/PHP]
    mi da 24 come risultato...invece dovrebbe essere 26...eppure i dati che mi ricavo sono corretti....ho controllato
    $str_giorno=30
    $str_mese=03
    $str_anno=1982


  • User Attivo

    Hai ragione... colpa mia che nella fretta ho messo i dati secondo l'ordine "europeo", mentre i parametri di mktime sono
    (ore, minuti, secondi, mese, giorno, anno),
    secondo la scrittura "americana" che segue il formato mm-gg-yyyy

    [PHP]
    $differenza=intval((time() - mktime(0,0,0,$str_mese,$str_giorno,$str_anno))/(31536000));
    [/PHP]

    Alessandro


  • User Attivo

    Grazie mille,ora funziona benissimo;)


  • User Attivo

    Sorge un problemino,oggi 23 marzo nell èta dell utente mi segna già 27,l utente compie i 27 anni il 30 marzo...io vorrei che 27 me lo segnasse appunto il giorno del compleanno...e non prima:?credo sia dovuto alla funzione intval il problemino che cerca comunque di dare un valore intero al risultato ma non ne sarei sicuro visto che togliendo intval alla stringa mi da come risultato 27.0004106418 eppure la data di nascita dell utente è 30-03-1982 ....come potrei risolvere la cosa?


  • User Attivo

    Ciao,
    il problema non è dovuto ad intval, ma agli anni bisestili per i quali non vale la corrispondenza:

    1 anno = 31536000 secondi

    Alessandro


  • User Attivo

    Quindi non c'è modo di risolvere...giusto?


  • User Attivo

    C'è sempre un modo di risolvere:
    [PHP]
    $eta = date("Y",time())-$str_anno-(date("md",time())<($str_mese.$str_giorno));
    [/PHP]

    Alessandro


  • User Attivo

    Grazie!
    Sei un mito;)


  • User Attivo

    Ciao Magicale,
    ho notato questo problema....praticamente ho un utente come data di
    nascita uguale a 23 04 1971...perchè nel calcolo degli anni mi da un -1 invece dell ètà esatta dell utente?


  • User Attivo

    Ciao,
    se provi così:
    [PHP]
    $str_giorno="23";
    $str_mese="04";
    $str_anno="1971";
    $eta = date("Y",time())-$str_anno-(date("md",time())<($str_mese.$str_giorno));
    [/PHP]
    Il risultato viene corretto. L'errore potrebbe essere nei dati, verifica che siano recuperati correttamente.

    Alessandro