Ho pensato di buttarlo qui perché questa sembra essere la forma più popolare di questa domanda.
Ho eseguito un confronto di 100 anni su 3 dei più popolari tipi di funzioni di età che ho trovato per PHP e ho pubblicato i miei risultati (così come le funzioni) sul mio blog .
Come puoi vedere qui , tutte e 3 le funzioni si preformano bene con solo una leggera differenza sulla seconda funzione. Il mio suggerimento basato sui miei risultati è di usare la terza funzione a meno che tu non voglia fare qualcosa di specifico per il compleanno di una persona, nel qual caso la prima funzione fornisce un modo semplice per farlo esattamente.
Abbiamo riscontrato un piccolo problema con il test e un altro problema con il secondo metodo! Aggiornamento in arrivo sul blog presto! Per ora, prenderei atto che il 2o metodo è ancora quello più popolare che trovo online, e tuttavia quello con cui sto trovando le più inesattezze!
I miei suggerimenti dopo la mia recensione di 100 anni:
Se vuoi qualcosa di più allungato in modo da poter includere occasioni come compleanni e simili:
function getAge($date) { // Y-m-d format
$now = explode("-", date('Y-m-d'));
$dob = explode("-", $date);
$dif = $now[0] - $dob[0];
if ($dob[1] > $now[1]) { // birthday month has not hit this year
$dif -= 1;
}
elseif ($dob[1] == $now[1]) { // birthday month is this month, check day
if ($dob[2] > $now[2]) {
$dif -= 1;
}
elseif ($dob[2] == $now[2]) { // Happy Birthday!
$dif = $dif." Happy Birthday!";
};
};
return $dif;
}
getAge('1980-02-29');
Ma se vuoi semplicemente conoscere l'età e niente di più, allora:
function getAge($date) { // Y-m-d format
return intval(substr(date('Ymd') - date('Ymd', strtotime($date)), 0, -4));
}
getAge('1980-02-29');
Una nota chiave sul strtotimemetodo:
Note:
Dates in the m/d/y or d-m-y formats are disambiguated by looking at the
separator between the various components: if the separator is a slash (/),
then the American m/d/y is assumed; whereas if the separator is a dash (-)
or a dot (.), then the European d-m-y format is assumed. If, however, the
year is given in a two digit format and the separator is a dash (-, the date
string is parsed as y-m-d.
To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or
DateTime::createFromFormat() when possible.
mktime(). sembra che php abbia calcolato malestrtotime()quel formato.