Alpha: Abstand zwischen einem Tag und jetzt in Jahren, Monaten, etc

Moin Leute, ich will auf meiner Homepage mein Alter im Jahren, Monaten, Wochen, Tagen, Stunden und Minuten angeben!

Mein Geburtstag ist der 08.12.1985, 13:40 Uhr (UNIX: 502893601)

Ich hab es versucht so gut es geht, habs aber nicht hingekriegt!
Da kamen am Ende Abweichungen von 2 Wochen raus. Gibt es dafür eine Funktion?
Wenn nicht, weiß jemand eine Ausgabemethode?

Danke schonmal...

  1. Hallo,

    es gibt eine einfache Lösung mit einem Haken:

    heute = time() = Millisekunden seit dem 1.1.1970
    eingebener Geburtstag in Millisekunden umgerechnet = meinezeit

    heute - meinezeit = deine_lebenszeit_in_millisekunden

    dann mittels mathematik umrechnen erst mod in jahre dann mod in monate usw.

    Der haken ist allerdings, daß niemand älter sein sollte als 33 Jahre.

    1. Sicher dass es Millisekunden seit dem 1.1.1970 sind?!

      Ich hab es auch so gemacht!

      Es hat bei den Jahren noch gestimmt, allerdings waren es dann 19 Monate... ich check meinen Fehler nicht! Vielleicht hab ich auch nur ein Brett vorm Kopf!

      Kann mir nicht jemand mal die Schritte Jahre und Monate machen?

      1. Hallo

        UNIX-Zeit, also das was time() ausspuckt sind Sekunden, nur so zur Klarstellung - mit Millisekunden wären wir wohl schon in höheren Zahlen-Bereichen...

        cu Benedikt Loepp

        --
        visite http://www.webocton.de - Aufträge erwünscht :-)
        1. Ups, mein Fehler, sorry.

  2. Hi!
    Das Problem bei dieser Sache sind die Schaltjahre.
    Wenn du einfach subtrahierst und den resultierenden Wert durch die entsprechende Werte (365/jahr, 30/monat) dividierst, wird darauf keine Rücksicht genommen.

    du müsstest also

    • zuerst time() - geburtstagstime -> Gesamtsumme

    • dich jahreweise bis zu deinem letzten geburtstag vorarbeiten (wieviele Tage sind es vom 8.12.1985, 13.40 bis zum 8.12.2002,13.40)

    • dieses von der Gesamtsumme abziehen

    • dann monatsweise weiter bis zum letzten 8., 13.40(also 8.8.2003, 13.40) (wieder die Anzahl der Tage abziehen)

    • und dann die restlichen tage, stunden und minuten ausrechnen.

    Hofe ich habe dir geholfen!
    mfG andi

  3. hi!

    ich kenne dafuer keine fertige php-funktion, aber mit date() kann man so einiges erreichen:
    folgende funktion subtrahiert einfach paarweise die einzelnen zeiteinheiten voneinander ab: also jetziges jahr minus geburtsjahr, jetziger monat minus geburtsmonat, usw.

    function timeDiffToNow($then_y, $then_m, $then_d, $then_h, $then_min){
     $now_y=date("Y");
     $now_m=date("n");
     $now_d=date("j");
     $now_h=date("G");
     $now_min=date("i");

    $diff_y=$now_y-$then_y;
     $diff_m=$now_m-$then_m;
     $diff_d=$now_d-$then_d;
     $diff_h=$now_h-$then_h;
     $diff_min=$now_min-$then_min;
     if($diff_min<0){
      $diff_min+=60;
      $diff_h--;
     }
     if($diff_h<0){
      $diff_h+=24;
      $diff_d--;
     }
     if($diff_d<0){
      $diff_d+=date("t", mktime(0,0,0,1, $then_m, $then_y));
      $diff_m--;
     }
     if($diff_m<0){
      $diff_m+=12;
      $diff_y--;
     }

    print $diff_y."-".$diff_m."-".$diff_d.", ".$diff_h.":".$diff_min;
    }
    timeDiffToNow(1985, 12, 8, 13, 40);

    zudem muessen noch die uebertrege beruecksichtigt werden, d.h. die differenz zwischen 13.59 und 14.00 ist nicht 1 stunde und -59 minuten, sondern eben nur eine minute. das wird mit den if-abfragen bewerkstelligt. wie man sieht, ist das bei den monaten nicht ganz so einfach, da jene unterschiedlich lang sind.
    schwierig wird's bei solchen abstaenden wie z.b. dem zwischen 30.april und 31.mai: 1 monat und 1 tag oder 31 tage? das ist dann ansichtssache...
    der code wuerde ersteres ausgeben.

    prost
    seth

    ps. hab den code uebrigens noch nicht oft getestet, solltest ihn also nochmal genau durchgehen.
    pps. ach so, du wolltest ja noch die wochen ausgeben... ok, das wuerde dann mit modulo-rechnung gehen: der ganzzahlige anteil von $diff_d/7 liefert die wochen und $diff_d%7 die restlichen tage.
    ppps. uebrigens: glaubst du, dass deine geplante anzeige irgendjemanden interessiert? imho ist sowas eher sinnfrei. ;-)