Alter wird falsch errechnet

Sweetlover

Mitglied
Hallo, habe folgenden Code:
PHP:
// $geburtsdatum wird aus DB im folgendem Format geholt
// 1986-01-01
// Jahr-Monat-Tag

$temp = explode("-",$geburtsdatum);
echo $temp[2].".".$temp[1].".".$temp[0];
$seconds = @mktime(0,0,0,$temp[1],$temp[2],$temp[0]);
$seconds = time() - $seconds;
$age = date("Y",$seconds)-1970;
echo " (".$age." Jahre alt)";

Nun errechnet PHP mir immer soweit das Alter. Das Problem ist bloß bei älteren Leuten, die vor 1970 ? oder so geboren sind. Jedes Mal wird dann immer 34 Jahre alt angezeigt. Was hab ich denn falsch gemacht?
 
Nun ich weis nicht wie es das SQL Interne Datumsvormat macht (denke das benutzt du), aber der Unix Timestamp entählt die Sekunden seit 1970, also alles was davor ist, das ist entweder negativ oder null (weis ich nicht)...

Ne Lösung weis ich aber grade auch nicht.
 
Was meinst du mit SQL-Internem-Datumsformat? Das Datum ist so gespeichert in der DB wie es im obigen PHP Script im Kommentar steht.

Das mit den Unix-Sekunden seit 1970 habe ich auch schon mal gehört.

Weißt denn jemand eine Lösung für alle Jahre, auch die UNTER 1970?
 
hier meine Uraltfunktion (hab in tiefsten Reservaten gekramt):

PHP:
function howold($born) 
{
	$split = explode(".",$born);
	$day = $split[0];
	$month = $split[1];
	$year = $split[2];
	
	$month_now = date("m");    //Monat
	$day_now = date("d");      //Tag
	if(strlen($split[2]) <= 2)
	{
		$year_now = date("y");     //Jahr
	}
	else
	{
		$year_now = date("Y");     //Jahr
	}
	
	if($year_now > $year)
	{
		$alter = $year_now - $year;
	}
	else
	{
		$alter = $year_now - $year + 100;
	}
	
	if ($month_now == $month)  // Monat gleich, Tag prüfen
	{
	 	if ($day_now < $day)
	 	{
	  		$alter = $alter - 1;     // Geburtstag noch nicht erreicht
	 	}
	} 
	elseif ($month_now < $month) 
	{   // Monat noch nicht erreicht
	 	$alter = $alter - 1;
	}
	return $alter;
}

Bloddy
 
Wenn du das Datum in der Form YYYY-MM-DD in der Datenbank stehen hast und es dort ausliest, kannst du die Altersberechnung auch gleich per SQL erledigen. Ich mach das immer so:

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

// Im Feld 'age' hast du nun das Alter stehen.
 
Zurück