Ich suche nach einer Möglichkeit, das Alter einer Person anhand ihres Geburtsdokuments im Format TT / MM / JJJJ zu berechnen.
Ich habe die folgende Funktion verwendet, die mehrere Monate lang einwandfrei funktioniert hat, bis eine Art Panne dazu führte, dass die while-Schleife nie endete und die gesamte Site zum Stillstand kam. Da diese Funktion mehrmals täglich von fast 100.000 DOBs durchlaufen wird, ist es schwierig festzustellen, was dies verursacht hat.
Hat jemand eine zuverlässigere Methode zur Berechnung des Alters?
//replace / with - so strtotime works
$dob = strtotime(str_replace("/","-",$birthdayDate));
$tdate = time();
$age = 0;
while( $tdate > $dob = strtotime('+1 year', $dob))
{
++$age;
}
return $age;
BEARBEITEN: Diese Funktion scheint manchmal in Ordnung zu sein, gibt jedoch "40" für ein DOB vom 14.09.1986 zurück
return floor((time() - strtotime($birthdayDate))/31556926);
mktime()
. es scheint, dass PHP dasstrtotime()
mit diesem Format falsch berechnet hat .strtotime
versteht Datumsformate perfekt, Sie müssen sich keine Sorgen machen: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.phpAb PHP 5.3.0 können Sie mit dem Handy
DateTime::createFromFormat
sicherstellen, dass Ihr Datum nicht mit demm/d/Y
Format verwechselt wird , und mit derDateInterval
Klasse (viaDateTime::diff
) die Anzahl der Jahre zwischen jetzt und dem Zieldatum ermitteln.quelle
quelle
Ich benutze Datum / Uhrzeit dafür:
quelle
Einfache Methode zur Berechnung des Alters aus dob:
31556926
ist die Anzahl der Sekunden in einem Jahr.quelle
$_age = floor((time() - strtotime('1986-09-16')) / 31556926);
// Altersrechner
quelle
Ich finde das funktioniert und ist einfach.
Von 1970 abziehen, da strtotime die Zeit vom 01.01.1970 berechnet ( http://php.net/manual/en/function.strtotime.php )
Ergebnisse:
quelle
Wenn Sie das Alter der Verwendung des Dob berechnen möchten, können Sie diese Funktion auch verwenden. Es verwendet das DateTime-Objekt.
quelle
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.
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:
Aber wenn Sie einfach nur das Alter und nichts mehr wissen wollen, dann:
Siehe BLOG
Ein wichtiger Hinweis zur
strtotime
Methode:quelle
Sie können die
Carbon
Bibliothek verwenden , die eine API-Erweiterung für DateTime ist.Sie können:
oder:
quelle
age
, die ein tutdiffInYears
. So können Sie schreiben:(new \Carbon\Carbon($date))->age
Wenn Sie keine große Präzision benötigen, nur die Anzahl der Jahre, können Sie den folgenden Code verwenden ...
Sie müssen dies nur in eine Funktion einfügen und das Datum "1971-11-20" durch eine Variable ersetzen.
Bitte beachten Sie, dass die Genauigkeit des obigen Codes aufgrund der Schaltjahre nicht hoch ist, dh etwa alle 4 Jahre sind die Tage 366 statt 365. Der Ausdruck 60 * 60 * 24 * 365 berechnet die Anzahl der Sekunden in einem Jahr - Sie können Ersetzen Sie es durch 31536000.
Ein weiterer wichtiger Punkt ist die Verwendung von UNIX Zeitstempels sowohl das Problem des Jahres 1901 als auch des Jahres 2038 auftritt, was bedeutet, dass der obige Ausdruck für Daten vor dem Jahr 1901 und nach dem Jahr 2038 nicht korrekt funktioniert.
Wenn Sie mit den oben genannten Einschränkungen leben können, sollte dieser Code für Sie funktionieren.
quelle
quelle
quelle
Ich habe dieses Skript für zuverlässig befunden. Das Datumsformat wird als JJJJ-MM-TT verwendet, es kann jedoch problemlos für andere Formate geändert werden.
quelle
quelle
i18n:
quelle
Probieren Sie eines dieser Objekte mit dem DateTime-Objekt aus
Referenz http://www.calculator.net/age-calculator.html
quelle
Schreiben Sie ein PHP-Skript, um das aktuelle Alter einer Person zu berechnen.
Geburtsdatum der Probe: 11.4.1987
Beispiellösung:
PHP-Code:
Beispielausgabe:
Ihr Alter: 30 Jahre, 3 Monate, 0 Tage
quelle
Dies ist meine Funktion zur Berechnung des DOB mit der spezifischen Altersrendite nach Jahr, Monat und Tag
So benutzt man es
quelle
Diese Funktion gibt das Alter in Jahren zurück. Der Eingabewert ist ein Datumsformat (JJJJ-MM-TT) des Geburtsdatums, z. B.: 2000-01-01
Es funktioniert mit Tagespräzision
Prost, nira
quelle
Wenn Sie einige der neueren Funktionen nicht verwenden können, habe ich Folgendes zusammengestellt. Wahrscheinlich mehr als Sie brauchen, und ich bin sicher, es gibt bessere Möglichkeiten, aber es ist leicht zu lesen, also sollte es den Job machen:
Beispiel Verwendung:
Hoffe das hilft.
quelle
Aufgrund des Schaltjahres ist es nicht ratsam, nur ein Datum von einem anderen zu subtrahieren und es auf die Anzahl der Jahre zu beschränken. Um das Alter wie die Menschen zu berechnen, benötigen Sie ungefähr Folgendes:
quelle
Das Folgende funktioniert gut für mich und scheint viel einfacher zu sein als die bereits gegebenen Beispiele.
Ich habe diesen Code getestet und aktiv verwendet. Er mag etwas umständlich erscheinen, ist aber sehr einfach zu verwenden und zu bearbeiten und ziemlich genau.
quelle
Nach der ersten Logik müssen Sie im Vergleich = verwenden.
quelle
Dies ist ein Problem, wenn Sie strtotime mit TT / MM / JJJJ verwenden. Sie können dieses Format nicht verwenden. Stattdessen können Sie MM / TT / JJJJ (oder viele andere wie JJJJMMTT oder JJJJ-MM-TT) verwenden und es sollte ordnungsgemäß funktionieren.
quelle
Wie wäre es, wenn Sie diese Abfrage starten und MySQL sie für Sie berechnen lassen:
Ergebnis:
Der Benutzer hat 27 Jahre und 6 Monate (es zählt einen ganzen Monat)
quelle
Ich habe es so gemacht.
quelle
Die beste Antwort dafür ist in Ordnung, aber nur in dem Jahr, in dem eine Person geboren wurde. Ich habe sie für meine eigenen Zwecke angepasst, um Tag und Monat zu ermitteln. Aber ich dachte, es lohnt sich zu teilen.
Dies funktioniert, indem ein Zeitstempel des DOB des Benutzers verwendet wird. Sie können dies jedoch jederzeit ändern
quelle
Wenn Sie nur als Alter volljährig werden möchten, gibt es eine sehr einfache Möglichkeit, dies zu tun. Behandeln Sie als 'JJJJMMTT' formatierte Daten als Zahlen und subtrahieren Sie sie. Danach stornieren Sie den MMDD-Teil, indem Sie das Ergebnis durch 10000 teilen und es auf den Boden legen. Einfach und scheitert nie, berücksichtigt sogar Leapyears und Ihre aktuelle Serverzeit;)
Da Geburtstage oder meistens durch vollständige Daten am Geburtsort angegeben sind und sie für die AKTUELLE LOKALE ZEIT relevant sind (wo die Altersüberprüfung tatsächlich durchgeführt wird).
Wenn Sie also bis zum Geburtstag überprüfen möchten, ob jemand in Ihrer Zeitzone 18 oder 21 oder weniger als 100 Jahre alt ist (ohne Rücksicht auf die Ursprungszeitzone), ist dies meine Vorgehensweise
quelle
Versuche dies :
quelle