Alter berechnen aus Datenbank Datum

Ich finde egal ob Anfänger oder nicht Lösungen die das Ergebnis aus der DB kommen wesentlich eleganter und meine diese seien auch performanter.
Für Laien mag das vielleicht hart seien, aber dann sieht man wenigstens auch mal wie es funtkioniert oder wie man es machen kann. Sonst fängt man mit x anderen Funtkionen im Script wieder an irgendwa sauszubessern.
Allein das Beipiels mein Datum kommt falsch formatiert aus der DB wie formatiere ich um. Da ist DATE_FORMAT wesentlich kürzer, eleganter und performanter als irgendein gesplitte und mktime und kram und das wieder umzudrehen.
 
Der Meinung bin ich auch: Wieso PHP die ganze Arbeit mit umständlichen Funktionskonstrukten überlassen, wenn das Ganze auch bereits fertig formatiert von MySQL übernommen werden kann?
 
Meiner Meinung nach ist die folgende SQL-Abfrage die eleganteste Lösung um das Alter aus einem Datum zu errechnen:
Code:
select YEAR(CURRENT_DATE)-YEAR(date_of_birth) - IF(RIGHT(CURRENT_DATE,5) < RIGHT(date_of_birth,5),1,0) from tabelle where id=21

In einfaches deutsch übersetzt:
wähle aktuelles Jahr minus Geburtsjahr und wenn aktuelles Datum (Monat und Tag werden verglichen) kleiner ist als das Datum des Geurtstages, dann ziehe 1 vom Ergebnis ab, ansonsten 0.

Das Ergebnis ist das tagesgenaue Alter.

Falls das Feld in der abgefragten Tabelle leer ist erhält man das aktuelle Jahr als 4-stellige Zahl.

Das kann man jedoch in einer einfachen if-Abfrage eliminieren:

Angenommen man speichert das Abfrageergebnis in $age, dann sieht die if-Klausel so aus:
Code:
$today = getdate();
echo ($age!=$today['year']) ? $age : 'unknown';

getdate() holt das aktuelle Datum in das Array $today:
Wenn $age ungleich $today['year'] ist wird $age ausgegeben ansonsten 'unknown'.

Wie gesagt, finde ich diese Lösung elegant und ausserdem ist sie sehr kurz.

Gurss
Benax
 
um das problem mit leuten die vor 1970 geboren sind zu umgehen

PHP:
function alter($u_date){	//u_date als 1900-12-31
	$u_date=explode("-",$u_date);
	$alter=date("Y")-$u_date[0];
	$heute=mktime(0,0,0,date('m'),date('d'),date('Y'));
	$diftoage=mktime(0,0,0,$u_date['1'],$u_date['2'],date('Y'));
	if($diftoage>$heute) $alter--;
    return $alter;
}
 

Neue Beiträge

Zurück