Altersberechnung mit PHP

phpmaxx

Grünschnabel
Hallo, ich habe ein Problem mit der Altersberechnung mit PHP
Ich habe eine Mitlgiederdatenbank, in der unter anderem auch das Geburtsdatum in 3 Spalten (btag, bmonat, bjahr) gespeichert wird. Ich lasse diese nun auslesen und benutze das untenstehende Script. Zwar wird mir immer der Wert ausgegebn, doch stimmt er in den meisten Fällen nicht. Oft sind Leute 15 obwohl sie nur 14 sind. Kann mir irgendjemand helfen? Liegt es vielleicht an Schaltjahren? Vielleicht habt ihr ja ein besseres Script.

Nochmal kurz zur Datenspeicherung in der DB:
Spalte btag: 1
Spalte bmonat: 1
Spalte bjahr: 1987

oder
Spalte btag: 9
Spalte bmonat: 11
Spalte bjahr: 1974

So werden die Daten gepseichert
ICh danke schonmal im Vorraus
Hoffe um Antworten

PHP:
$geb_date = "$btag.$bmonat.$bjahr";
$geb = explode(".",$geb_date);

$heute_date = date("d.m.Y",time());
$heute = explode(".",$heute_date);

if($geb[0] < $heute[0]){
if($geb[1] < $heute[1]){
$alter = $heute[2] - $geb[2];
}else{
$alter = $heute[2] - $geb[2] - 1;
}
}else{
if($geb[1] < $heute[1]){
$alter = $heute[2] - $geb[2];
}else{
$alter = $heute[2] - $geb[2] - 1;
}
}
echo "$alter";
 
Damit sollte es gehen.

PHP:
$Geburtsdatum = $btag.$bmonat.$bjahr;

$GEB["Split"] = explode(".", $Geburtsdatum);

$HEUTE = time();
$GEBOREN = mktime(0,0,0,$GEB["Split"][1],$GEB["Split"][0],$GEB["Split"][2]);
$ALTER["Sekunden"] = $HEUTE - $GEBOREN;
$ALTER["Tage"] = $ALTER["Sekunden"] / 60 / 60 / 24;
$ALTER["Jahre"] = $ALTER["Tage"] / 365;

$Temp = explode(".", $ALTER["Jahre"]);
$ALTER["Jahre"] = $Temp[0];

if($Geburtsdatum == "") {

      $ALTER["Jahre"] = "";

} else {

      echo $ALTER["Jahre"];

}
 
Doch jetz geht es...Es kommt zwar wieder eine einigermaßen angemessene Zahl aber das Alter stimmt immer noch nich
Zum Beispiel: Heute ist der 15.06.04. Morgen hat einer Geburtstag: 16.06.04.
Also wird er erst morgen 17. Bei mir steht aber schon eine 17. Kann mir einer helfen?
 
PHP:
$geb_date = "$btag.$bmonat.$bjahr"; 
$geb = explode(".",$geb_date); 

$heute_date = date("d.m.Y",time()); 
$heute = explode(".",$heute_date); 

if ((($geb[0] < $heute[0]) && ($heute[1] == $geb[1])) || ($heute[1] < $geb[1])) { 
  alter = $heute[2] - $geb[2] -1; 
}
else {
  alter = $heute[2] - $geb[2]; 
}
echo "$alter";

so aber, oder?
 
Hallöchen,

ich denke an dieser Stelle wäre die Suchfunktion gut gewesen. Dieses Thema wurde hier schon einige male behandelt. Ich gebe dazu immer den gleichen Tipp:

Speichere das Datum als TIMESTAMP oder DATE und lasse das ganze gleich von MySQL berechnen.

PHP:
// Angenommen du speicherst im Feld "GebDatum" das Geburtsdatum des Benutzers

$sql = "SELECT (YEAR(CURRENT_DATE)-YEAR(GebDatum)) - (RIGHT(CURRENT_DATE,5)<RIGHT(GebDatum,5)) AS age FROM tabelle";

$r = mysql_query ($sql);

// Im Feld "age" steht jetzt das Alter des Benutzers.
 
Zurück