Ich dachte, ich würde das hier aufwerfen, da dies die beliebteste Form dieser Frage zu sein scheint.
Ich habe einen 100-Jahres-Vergleich mit 3 der beliebtesten Arten von Altersfunktionen durchgeführt, die ich für PHP finden konnte, und meine Ergebnisse (sowie die Funktionen) in meinem Blog veröffentlicht .
Wie Sie dort sehen können , sind alle 3 Funktionen gut vorgeformt, mit nur einem kleinen Unterschied zur 2. Funktion. Mein Vorschlag, basierend auf meinen Ergebnissen, ist die Verwendung der 3. Funktion, es sei denn, Sie möchten etwas Bestimmtes zum Geburtstag einer Person tun. In diesem Fall bietet die 1. Funktion eine einfache Möglichkeit, genau das zu tun.
Es wurde ein kleines Problem mit dem Test und ein weiteres Problem mit der 2. Methode gefunden! Update kommt bald zum Blog! Im Moment würde ich zur Kenntnis nehmen, dass die 2. Methode immer noch die beliebteste ist, die ich online finde, und dennoch diejenige, mit der ich die meisten Ungenauigkeiten finde!
Meine Vorschläge nach meinem 100-jährigen Rückblick:
Wenn Sie etwas Längeres wünschen, damit Sie Anlässe wie Geburtstage und dergleichen einbeziehen können:
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');
Aber wenn Sie einfach nur das Alter und nichts mehr wissen wollen, dann:
function getAge($date) { // Y-m-d format
return intval(substr(date('Ymd') - date('Ymd', strtotime($date)), 0, -4));
}
getAge('1980-02-29');
Ein wichtiger Hinweis zur strtotimeMethode:
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(). es scheint, dass PHP dasstrtotime()mit diesem Format falsch berechnet hat .