Sven: Alter berechnen?

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?

  1. 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.

    1. 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

      --
      -------------------
      ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
      1. 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

        Hallo, Danke!
        Aber ich kann leider nicht so gut Englisch - Gibt es auch eine Deutsche Seite?

        1. Aber latürnich...

          MfG
          Rouven

          --
          -------------------
          ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
          1. Aber latürnich...

            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!

            1. 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

              1. 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

                1. Hallo!

                  Danke, jetzt funktioniert es. Habe mir was kleines gebastelt was die schaltjahre berechnet wie viele vorkommen.

                  MFG
                  Sven!

              2. 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 ;-)

              3. 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

                --
                Wer Rechtschreibfehler findet, darf sie behalten.
                1.   
                  
                  > 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

                  --
                  Wer Rechtschreibfehler findet, darf sie behalten.