Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    Verificare chi è maggiorenne

    Ciao a tutti,
    ho un database (mysql) di iscritti, per ognuno dei quali ho i tre campi:

    $datanascita_giorno
    $datanascita_mese
    $datanascita_anno

    (esempio: $datanascita_giorno=18, $datanascita_mese=marzo, $datanascita_anno=1987)

    Vorrei risolvere questo problema:
    devo convalidare l'iscrizione solo se la persona risulta maggiorenne.
    Come fare?
    Avevo pensato a fare la differenza in giorni tra la data dell'iscrizione (ossia quella attuale) e quello della data di nascita, e se il risultato è maggiore di 365*18 allora ok, ma così non tengo conto degli anni bisestili..
    qualcuno sa come risolvere?
    Grassssiee

  2. #2

    Re: Verificare chi è maggiorenne

    Originariamente inviato da IGS
    Avevo pensato a fare la differenza in giorni tra la data dell'iscrizione (ossia quella attuale) e quello della data di nascita, e se il risultato è maggiore di 365*18 allora ok, ma così non tengo conto degli anni bisestili..
    qualcuno sa come risolvere?
    Grassssiee
    soluzione 1:
    ... massì, giorno + giorno -
    soluzione 2:
    fai il calcolo degli anni bisestili (presente il calendario gregoriano?)
    soluzione 3: componi la data ed esegui il calcolo con le apposite funzioni PHP
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  3. #3
    soluzione 1:
    la volevo, appunto, evitare

    soluzione 2:
    no, non conosco l'algoritmo

    soluzione 3:
    quali sono le apposite funzioni? Non le conosco, ma così non avrei lo stesso problema della soluzione 1?

  4. #4
    fai tutto con mktime(), guarda nel manuale.

    eta_in_secondi = mktime( adesso ) - mktime( data nascita utente )

  5. #5
    eccolo:

    $data_anno_oggi=date("Y");
    $data_mese_oggi = date("n");
    $data_giorno_oggi = date("d");

    $data1 = mktime(0, 0, 0, $data_giorno_oggi, $data_mese_oggi, $data_anno_oggi, 0);

    $data2 = mktime(0, 0, 0, $eta_giorno, $eta_mese_n, $eta_anno, 0);

    $giorni_diff=($data1 - $data2)/(60*60*24);

    if (intval($giorni_diff>(365*18))) {$eta_maggiore_18='si';} else {$eta_maggiore_18='no';}
    ma il punto non cambia, così non tengo conto degli anni bisestili.
    Ok che potrei dire: in 18 anni al massimo ci sono 4 anni bisestili, per cui posso modificare:

    intval($giorni_diff>(365*18))
    in
    intval($giorni_diff>(365*18+4))

    però ottengo sempre un risultato che è "quasi" giusto, ma non correttissimo lo stesso.
    Per essere pignoli (e non fare figuracce con gli utenti) come si può migliorare il codice?

  6. #6
    Ti ho consigliato di usare mktime() non a caso, in quanto sono fortemente portato a ritenere che tenga in considerazione anche eventuali anni bisestili, perchè mktime ti da il numero di secondi trascori dal January 1 1970 00:00:00 GMT, e se non è un cazzaro ne DEVE tenere conto

    ma il tuo dubbio era sull'analisi dell'età in secondi che ottieni dopo la differenza... uhm, devi fartelo a mano allora, tenendo conto che:

    Un anno è bisestile se il suo numero è divisibile per 4, tranne che se sia divisibile per 100 (ma è bisestile se è divisibile per 400).

  7. #7
    mktime per le date di nascita si limita comunque alle nascite avvenute dopo il 1970. Poi e' errata la posizione di mese giorno.

    Calcola la data con i singoli valori che hai scomposto:

    codice:
    <?php
    $data_anno_oggi = date("Y");
    $data_mese_oggi = date("n");
    $data_giorno_oggi = date("j");
    
    $eta_anno = '1987';
    $eta_mese = '1';
    $eta_giorno = '5';
    
    IF(($data_anno_oggi - $eta_anno) > 18 ) { echo "sei maggiorenne";    }
    
       elseif(($data_anno_oggi - $eta_anno) < 18 ) { echo "sei minorenne";    }
    
       elseif(($data_anno_oggi - $eta_anno) == 18 AND $data_mese_oggi >= $eta_mese AND $data_giorno_oggi >= $eta_giorno)
                { echo "sei maggiorenne";  }
    
               else { echo "sei ancora minorenne";    }
    
    ?>

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

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    15
    Ufficio complicazione affari semplici.

    Il giorno G M ANNODINASCITA + 18 tu sei maggiorenne indipendentemente dagli anni bisestili.

    Ma secondo te uno diventa maggiorenne dopo 365*18 giorni oppure dopo 18 anni?


  9. #9
    grazie piero.mac, script semplice e funzionale!

  10. #10
    Originariamente inviato da RayAW
    Ufficio complicazione affari semplici.

    Il giorno G M ANNODINASCITA + 18 tu sei maggiorenne indipendentemente dagli anni bisestili.

    Ma secondo te uno diventa maggiorenne dopo 365*18 giorni oppure dopo 18 anni?


    non posso tener conto solo degli anni.
    Se oggi è 4 gen 2005
    chi è nato il 5 gen 1987 mi viene considerato maggiorenne anche se non lo è

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 © 2024 vBulletin Solutions, Inc. All rights reserved.