Anzeige:
Ergebnis 1 bis 3 von 3

Thema: DateDiff (jaja, leidiges Thema)

  1. #1
    Ravetracer
    Gast

    DateDiff (jaja, leidiges Thema)

    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.

  2. #2
    Ravetracer
    Gast
    Ich weiß ja nicht, ob meine Fragen hier unverständlich sind oder einfach nicht
    beantwortet werden wollen. Jedenfalls bekomme ich selten Antworten oder
    Tipps.
    Ich kann mir halt auch nicht vorstellen, dass hier noch keiner solch eine Funktion
    gebraucht hat, oder gemerkt hat, dass schon existierende Funktionen nach einer
    Weile Fehler machen.
    Naja egal. Ich bin ja nicht so.
    Ich habe nun dann doch eine Funktion gefunden, die auch korrekt die Tage
    berechnet und wo es keine Probleme gibt.

    Kuckst du hier:
    http://maseko.com/project/wp-plugins/wp-datediff/

    Ich habe verschiedene Daten ausprobiert und es funktioniert immer.

  3. #3
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von Ravetracer Beitrag anzeigen
    Ich weiß ja nicht, ob meine Fragen hier unverständlich sind oder einfach nicht
    beantwortet werden wollen. Jedenfalls bekomme ich selten Antworten oder
    Tipps.
    Such mal im Internet oder in Foren nach der Berechnung eines Schaltjahres in PHP.
    In den etwas umfangreicheren Beispielen findest Du alle PHP Funktionen
    die man braucht um eine Zeitdifferenz zu berechnen.
    Im Grunde ist dies ganz einfach, wenn man weiß das

    1 Minute = 60 Sekunden
    1 Stunde = 60 Minuten
    usw.

    Bis auf die Besonderheiten bei Schaltjahren kann dies doch mit den Grundrechenarten berechnen werden.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •