Ecco una semplice funzione per calcolare l’età con il php, la funzione riceve in entrata la data del compleanno (dob) in formato YYYY-MM-DD e ritorna l’età…
Ecco come:
function getAge ($birthday){ list($year,$month,$day) = explode("-",$birthday); $year_diff = date("Y") - $year; $month_diff = date("m") - $month; $day_diff = date("d") - $day; if ($day_diff < 0 || $month_diff < 0) $year_diff--; return $year_diff; }
Esempio d’uso:
$age = getAge('1983-05-12'); echo "Età:" . $age;
Lo script è da correggere.
Nella data basta inserire un mese che preceda quello attuale, ed un giorno del mese che ancora deve venire.
Per esempio :
Oggi è il 18 Ottobre 2013 ( 2013-10-18 ).
Se io fossi nato il 25 Maggio del 1990, teoricamente, mi basterebbe inserire la data in questo modo 1990-05-25, per ottenere la mia ipotetica età, ovvero 23 anni.
Dato che lo script diminuisce l’età di un anno anche semplicemente aumentando di uno il giorno attuale, l’età non può essere calcolata correttamente.
Per correggere lo script, basta sostituire il costrutto If, con questo :
################
if ( ($day_diff < 0 && $month_diff <= 0) || ($month_diff < 0) )
{
$year_diff–;
}
################
In questo modo l'età verrà calcolata in modo corretto.
C’è un piccolo errore nella condizione if. Infatti se il giorno del compleanno è minore al giorno corrente, ma il mese del compleanno è maggiore al mese corrente la funzione non dovrebbe ridurre la differenza di anni di 1.
Al posto della if come scritta nel post si potrebbe scrivere:
//SP 2013-10-11
if ($month_diff < 0)
$year_diff–;
if ($month_diff == 0 && $day_diff <0)
$year_diff–;
//SP 2013-10-11