Datumsdifferenz in Tagen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datumsdifferenz in Tagen

    Hallo zusammen!

    Ich sollte im einem PHP-Skript die Differenz (in Tagen) zweier Datumseingaben rechnen:

    zB Eingabe 23.01.2003 und 20.02.2003 = 28 Tage

    Die Eingaben werden im Format dd.mm.yyyy gemacht.

    Kann mir da jemand weiterhelfen?

    Greets Thomas

  • #2
    - wandelt die daten in einen timestamp um

    - bilde differenz

    - rechne diesen wert wieder in tage & co um


    tipp: auch mal im forum suchen. die frage ist schon mehrfach benatowortet worden
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Comment


    • #3
      Besten Dank konnte das Problem lösen; aber jetzt habe ich trotzdem noch ein Frage.

      Ich benötige dieses Skript für die Berechnung von Verzugszinsen. Nach der "Banken-Norm" hat bekanntlich jeder Monat 30 Tage; das heisst das Jahr 360 Tage! Kann ich das irgendwie noch in das Skript einbauen:

      <?
      $datumVon = "04/04/2002";
      $datumBis = "31/04/2003";

      $myArrayDatumVon = explode("/", $datumVon);
      $datumVon = mktime(0,0,0,$myArrayDatumVon[1],$myArrayDatumVon[0],$myArrayDatumVon[2]);

      $myArrayDatumBis = explode("/", $datumBis);
      $datumBis = mktime(0,0,0,$myArrayDatumBis[1],$myArrayDatumBis[0],$myArrayDatumBis[2]);

      $differenztage = ($datumBis-$datumVon) / (3600*24);

      echo "$differenztage";
      ?>

      Besten Dank & Greets

      Comment


      • #4
        Nach der "Banken-Norm" hat bekanntlich jeder Monat 30 Tage
        ...ist schon richtig. die machen das aber nur, damit es einfacher zu rechnen ist.
        es kann dir keiner verbieten, die zinsen 'richtig' zu berechnen...
        eval(str_pad(aa|db,4,slarti^~äü_i_)." \"áú¾ïùû䶳Ðäýï©üèíþç£þé\"^~\"no bugs, only features\";");

        Comment


        • #5
          Warum aufwendig mit Datumsfunktionen arbeiten, wenn eh immer die 30 Tage berücksichtig werden müssen ... lös es rein rechnerisch:
          PHP Code:
          function handelstag($datum)
          {
            
          $tmp explode('/'$datum);
            return 
          360*$tmp[2] + 30*$tmp[1] + min($tmp[0], 30);
          }
          $datumVon '04/04/2002';
          $datumBis '31/04/2003';

          $differenztage handelstag($datumBis) - handelstag($datumVon); 
          Last edited by Titus; 28-03-2003, 15:38.
          mein Sport: mein Frühstück: meine Arbeit:

          Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

          Comment


          • #6
            Da gibts aber ein Problemchen mit dem Februar (Schaltjahr); kann mir da jemand helfen?

            Es gibt bestimmt eine Möglichkeit, dass er beim Februar (je nach Jahr) bereits am 28. resp. 29. dreissig Tage rechnet.

            Thanks & Greets

            Comment


            • #7
              Wie läuft das?
              Wenn ich am 27. was einzahle, krieg ich am 28. für drei Tage Zinsen?

              Dann wird entweder die Berechnung aufwändiger:
              PHP Code:
              function handelstag($datum)
              {
                list(
              $d$m$y) = explode('/'$datum);
                if(
              $m==&& $d==
                  (
              $y%28 : ($y%100 29 : ($y%400 28 29)))
                ) 
              $d 30;
                return 
              360*$y 30*$m min(30$d);

              oder die date-Funktion kommt doch noch zum Zug:
              PHP Code:
              function handelstag($datum)
              {
                list(
              $d$m$y) = explode('/'$datum);
                if (
              $m==&& $d==
                  
              date('t'mktime(0,0,0,$m,$d,$y))
                ) 
              $d 30;
                return 
              360*$y 30*$m min(30$d);

              Die erste Variante sieht zwar komplizierter aus, ist dafür aber einen Tick schneller als die zweite.
              Last edited by Titus; 28-03-2003, 15:38.
              mein Sport: mein Frühstück: meine Arbeit:

              Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

              Comment


              • #8
                Besten Dank Titus!

                Genau so rechnen auch die Banken den Zins aus!

                Wenn jemand in einer Applikation Verzugszinsen berechnen muss, soll er am besten dieses Skript für die Berechnung der Zinstage verwenden.

                Übrigens ist in bei "explode("/", $datumVon);" noch ein kleiner Fehler; richtig sollte es "explode("/", $datum);" heissen.

                Greets, Thomas

                Comment


                • #9
                  öhm ... hast Recht

                  jetzt nicht mehr
                  mein Sport: mein Frühstück: meine Arbeit:

                  Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                  Comment


                  • #10
                    Sorry, dass ich diesen Thread ausgrabe, aber meine Frage bezieht sich genau auf dieses Thema.

                    Zur Ausgangsfrage mit der Tagdifferenz - Wie kann ich es realisieren, dass nur "absolute" Tage zählen. Das heißt im Prinzip, ich will wissen, wie oft "0 Uhr" in der Differenz drin ist.

                    Samstag, 3.10.08 22 Uhr bis Sonntag, 4.10.08 2 Uhr soll also 1 ergeben, obwohl nur 4 Stunden.

                    Gruß Nico


                    Edit: Habs so gelöst, ist das richtig?

                    PHP Code:
                        function getTimedifference($mysql){  
                    ...      
                    $testmktime(100date("m",$row['lastactive'])  , date("d",$row['lastactive']), date("Y",$row['lastactive']));       
                    return 
                    floor((mktime() - $test)/(3600*24));     } 
                    bei mktime(1,... hab ich 1 gewählt, weil wir GMT + 1 sind, das ist logisch richtig oder?
                    Last edited by ghostnw; 25-12-2008, 22:21.

                    Comment

                    Working...
                    X