Hallo Leute.
Ich habe ein kleines Problem mit DateDiff-Funktionen, die ich im Internet so
zusammensuche.
Ich möchte, dass das Alter meines Sohnes und meiner Tochter in Jahre, Monate und Tage ausgegeben wird.
Die üblichen Berechnungen durch Timestamps kennt ja jeder.
Aber es kommt immer wieder vor (meistens beim Monatswechsel), dass bei
einem immer ein Tag mehr oder weniger ist.

Habe übrigens folgendes Kommentar im Netz gefunden (Für Tage):
$datediff = floor($difference / 86400);

Very buggy implementation, since day IS NOT a 24 hours (can be also 23 and 25 due to daylight savings).
Using this function can cause +-1 day error.
Gibt es eine Funktion, die den Tag genau berechnen kann?
Auf unserer HP existiert schon ein Javascript, was die Zeit bis auf die
Sekunde genau zeigt. Das funktioniert ja auch super, aber ich brauche das
auch in PHP für einen grafischen Ticker meiner Frau, der über die GD-Lib
erzeugt wird.

Ich hänge mal noch das Javascript mit an, damit komme ich nämlich nicht
klar, auch wenn beide Sprachen dem gleichen Standard entsprechen:
Code:
    <script language="JavaScript">
    <!--
      var jahr=2005, monat=9, tag=8, stunde=4, minute=11, sekunde=0; // Start-Datum in MEZ

      function countup() {
        var startDatum=new Date(jahr,monat-1,tag,stunde,minute,sekunde);
        zielDatum=new Date(); // Aktuelles Datum

        // Countup erst berechnen und anzeigen, wenn Start-Datum berschritten wird
        if(startDatum<zielDatum)  {

          var jahre=0, monate=0, tage=0, stunden=0, minuten=0, sekunden=0;

          /* Allgemeines Vorgehen:
           * Zun�hst werden die vollen Jahre gez�lt
           * und anschlie�nd der Start- und Ziel-Monat auf den jeweiligen 1. gesetzt.
           * Nun werden erst die vollen Monate vom 1. zum 1. des Start- bzw. Ziel-Monats
           * berechnet und danach die tats�hlichen Monatstage wieder mit einbezogen.
           * Dieses Vorgehen vermeidet Probleme mit den verschiedenen Monatsl�gen.
           * Was brig bleibt, wird in Tagen, Stunden, Minuten und Sekunden ausgedrckt.*/

          // Jahre
          if(startDatum<zielDatum) {
            while(startDatum<zielDatum) {
              if(startDatum.setFullYear(startDatum.getFullYear()+1)<=zielDatum) jahre++;
            }
          startDatum.setFullYear(startDatum.getFullYear()-1);
          }

          // Restliche Tage zum Monatsende ermitteln
          var restTage=0;
          var m=startDatum.getMonth();
          if(m==1-1|| m==3-1||m==5-1||m==7-1||m==8-1||m==10-1||m==12-1)
              restTage=31-startDatum.getDate();
          else if(m==4-1|| m==6-1||m==9-1||m==11-1) restTage=30-startDatum.getDate();
          else if(m==2-1) {
            if(startDatum.getFullYear()%4==0 && (startDatum.getFullYear()%100!=0
                || startDatum.getFullYear()%400==0))
                    restTage=29-startDatum.getDate(); // Schaltjahr
            else restTage=28-startDatum.getDate();
          }

          // Start- und Ziel-Tag merken und auf 1 setzen
          var startTag=startDatum.getDate();
          var zielTag=zielDatum.getDate();
          startDatum.setDate(1);
          zielDatum.setDate(1);

          // Monate
          if(startDatum<zielDatum) {
            while(startDatum<zielDatum) {
              if(startDatum.setMonth(startDatum.getMonth()+1)<=zielDatum) monate++;
            }
            startDatum.setMonth(startDatum.getMonth()-1);
          }

          // Tats�hlichen Start- und Ziel-Tag bercksichtigen
          if(startDatum.getMonth()==zielDatum.getMonth()) {
            if(startTag<=zielTag) startDatum.setDate(startTag);
            else {
              monate--;
              tage=restTage+1;
            }
          }
          else {
            startDatum.setMonth(startDatum.getMonth()+1);
            if(startTag>=zielTag) tage=restTage+1;
            else {
              monate++;
              startDatum.setDate(startTag);
            }
          }
          zielDatum.setDate(zielTag);

          // Tage
          restTage=Math.floor((zielDatum-startDatum)/(24*60*60*1000));
          startDatum.setTime(startDatum.getTime()+restTage*24*60*60*1000);
          tage+=restTage;

          // Stunden
          stunden=Math.floor((zielDatum-startDatum)/(60*60*1000));
          startDatum.setTime(startDatum.getTime()+stunden*60*60*1000);

          // Minuten
          minuten=Math.floor((zielDatum-startDatum)/(60*1000));
          startDatum.setTime(startDatum.getTime()+minuten*60*1000);

          // Sekunden
          sekunden=Math.floor((zielDatum-startDatum)/1000);

document.countupform.countupjahr.value=jahre;
					document.countupform.countupmonat.value=monate;
					document.countupform.countuptag.value=tage;
					document.countupform.countupstunde.value=stunden;
					document.countupform.countupminute.value=minuten;
					document.countupform.countupsekunde.value=sekunden;

        }
        // Anderenfalls alles auf Null setzen
        else document.countupform.countupinput.value=
            "0 Jahre,  0 Monate,  0 Tage,  0 Stunden,  0 Minuten  und  00 Sekunden";

        setTimeout('countup()',200);
      }
      // -->
    </script>
Vielleicht kann mir ja einer von euch helfen.