Alter berechnen?
Sven
- php
Hallo,
wollte in mein Forum einbauen, dass man sein Geburtstag angeben kann. Und er soll jetzt automatisch das Alter ausrechnen. Wie geht das? Er Speichert das so Z.b. ab: 2005-06-04. Habe probiert Aktuelles Datum-Geburtstag aber da kommt irgendeine -Zahl raus.
Hat jemand ne Idee?
Hallo,
wollte in mein Forum einbauen, dass man sein Geburtstag angeben kann. Und er soll jetzt automatisch das Alter ausrechnen. Wie geht das? Er Speichert das so Z.b. ab: 2005-06-04. Habe probiert Aktuelles Datum-Geburtstag aber da kommt irgendeine -Zahl raus.
Hat jemand ne Idee?
Ah, mein Fehler, habe das falsche Format gehabt. Habe das jetzt so:
$Old=Date("Y-M-D")-$row['GDatum'];
Aber kommt immer noch was falsches raus - Z.b. Habe am 4.6.1987 (1987-06-04) da kommt 19 raus aber bin ja noch 18 bis zum 4.6.
Hi,
$Old=Date("Y-M-D")-$row['GDatum'];
Gehe ich Recht in der Annahme, dass du dieses $row aus einer Datenbank befüllst? Wenn ja, lass halt sie die Arbeit machen. Wenn du dein Geburtsdatum ordentlich als Datum in der Datenbank gespeichert hast, dann bekommst du auch keine Probleme mit Formaten.
MySQL Date- and Time-Functions
MfG
Rouven
Hi,
$Old=Date("Y-M-D")-$row['GDatum'];
Gehe ich Recht in der Annahme, dass du dieses $row aus einer Datenbank befüllst? Wenn ja, lass halt sie die Arbeit machen. Wenn du dein Geburtsdatum ordentlich als Datum in der Datenbank gespeichert hast, dann bekommst du auch keine Probleme mit Formaten.
MySQL Date- and Time-FunctionsMfG
Rouven
Hallo, Danke!
Aber ich kann leider nicht so gut Englisch - Gibt es auch eine Deutsche Seite?
MfG
Rouven
MfG
Rouven
Danke, werde ich mal anschauen! Habe kurz schonmal reingeguckt, im moment weis ich damit nix anzufangen. Aber ich hoffe ich verstehe das noch ;).
MFG
Sven!
Leider konnte ich damit nix anfangen. Habe folgendes gefunden:
$jetzt = mktime(0,0,0,date("m"),date("d"),date("y"));
$geburtstag = mktime(0,0,0,$monat,$tag,$jahr);
$alter = intval(($jetzt - $geburtstag) / (3600 * 24 * 365));
Scheint auch soweit zu funktionieren. Aber er berechnet 4 Tage Falsch! Z.b. Gebe ich das G-Datum ein: 31.01.1995 zeigt er 11 an was korrekt ist. Gebe ich 01.02.1995 ein zeigt er immer noch 11 an. Was eigendlich 10 Jahre ist. Erst ab 04.02.1995 zeigt er 10 Jahre an.
Woran liegt das? Wie behebt man das?
MFG
Hallo Sven,
$alter = intval(($jetzt - $geburtstag) / (3600 * 24 * 365));
Scheint auch soweit zu funktionieren. Aber er berechnet 4 Tage Falsch! Z.b. Gebe ich das G-Datum ein: 31.01.1995 zeigt er 11 an was korrekt ist. Gebe ich 01.02.1995 ein zeigt er immer noch 11 an. Was eigendlich 10 Jahre ist. Erst ab 04.02.1995 zeigt er 10 Jahre an.
Woran liegt das?
Du hast vergessen, dass es Schaltjahre gibt.
Wie behebt man das?
Erste Möglichkeit: Durch eine Kalenderreform.
Sollte dies nicht möglich sein, so versuche doch Rouvens Vorschlag umzusetzen :-)
Weitere Möglichkeit:
Vergleiche die Jahresangaben, die Monatsangaben und ggf. die Tagesangaben miteinander und komme so zum richtigen Ergebnis. Beachte dabei die richtige Behandlung des 29. Februars.
Freundliche Grüße
Vinzenz
Hallo!
Danke, jetzt funktioniert es. Habe mir was kleines gebastelt was die schaltjahre berechnet wie viele vorkommen.
MFG
Sven!
Hallo Sven,
eigentlich zeigt er doch nur drei Tage falsch an, nämlich 01.02.1995, 02.02.1995 und 03.02.1995.
Das liegt - meiner Vermutung nach - daran, dass du zwischen 1995 und 2006 genau drei Schaltjahre hattest (nämlich 1996, 2000 und 2004 - Anmerkung: ja: 2000 war auch ein Schaltjahr)
$alter = intval(($jetzt - $geburtstag) / (3600 * 24 * 365));
Hier berechnest du den Unterschied zwischen Jetzt und dem Geburtstag in Sekunden. Ein Jahr hat 3600*24*365 Sekunden, also wird durch diese Zahl geteilt. Ein Schaltjahr hat aber 3600*24*366 Sekunden. Also müßtest du irgendwie die Schaltjahre berücksichtigen. Bin jetzt zu faul, was zu programmieren. Aber schau dir mal noch den Wikipedia Artikel über Schaltjahre an.
Liebe Grüße
mbr
P.S.: Folge mal den Link zum Thema Schaltsekunden... Mann gut, dass du nicht sekundengenau rechnen willst ;-)
Hallo MFG...
list($tag,$monat,$jahr) =explode('.','10.02.1968',3);
list($j_tag,$j_monat,$j_jahr)=explode('.',date('d.m.Y'),3);
$das_alter =$j_jahr-$jahr -((intval($monat)>intval($j_monat) ? 1 : (intval($tag)>intval($j_tag) ? 1 : 0));
Das berechnen von Schaltjahren ist doch Humbug, wenn man nur vergleichen muß, ob Monate größere oder kleinere und gegebenenfalls Tage größere oder kleinere Werter abbilden.
Gruß aus Berlin!
eddi
> list($tag,$monat,$jahr) =explode('.','10.02.1968',3);
> list($j_tag,$j_monat,$j_jahr)=explode('.',date('d.m.Y'),3);
$das_alter =$j_jahr-$jahr -((intval($monat)>intval($j_monat) ? 1 : (($monat==$j_monat && intval($tag)>intval($j_tag)) ? 1 : 0));
das ist ja heute schon die zweite programmiertechnische Fehlgeburt
Gruß aus Berlin!
eddi