Pensé en lanzar esto aquí ya que esta parece ser la forma más popular de esta pregunta.
Realicé una comparación de 100 años en 3 de los tipos más populares de funciones de edad que pude encontrar para PHP y publiqué mis resultados (así como las funciones) en mi blog .
Como puede ver allí , las 3 funciones funcionan bien con solo una ligera diferencia en la segunda función. Mi sugerencia basada en mis resultados es usar la tercera función a menos que desee hacer algo específico en el cumpleaños de una persona, en cuyo caso la primera función proporciona una manera simple de hacer exactamente eso.
¡Se encontró un pequeño problema con la prueba y otro problema con el segundo método! ¡La actualización llegará pronto al blog! Por ahora, tomaría nota, ¡el segundo método sigue siendo el más popular que encuentro en línea y, sin embargo, sigue siendo el que encuentro con más imprecisiones!
Mis sugerencias después de mi revisión de 100 años:
Si desea algo más alargado para que pueda incluir ocasiones como cumpleaños y tal:
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');
Pero si simplemente quieres saber la edad y nada más, entonces:
function getAge($date) { // Y-m-d format
return intval(substr(date('Ymd') - date('Ymd', strtotime($date)), 0, -4));
}
getAge('1980-02-29');
Una nota clave sobre el strtotime
método:
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()
. parece que PHP calculó malstrtotime()
con ese formato.strtotime
entiende perfectamente los formatos de fecha, no necesita preocuparse: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.
php.net/manual/en/function.strtotime.php