Datumsdifferenz in Tagen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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 |


    Kommentar


    • #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

      Kommentar


      • #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\";");

        Kommentar


        • #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); 
          Zuletzt geändert von 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.

          Kommentar


          • #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

            Kommentar


            • #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.
              Zuletzt geändert von 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.

              Kommentar


              • #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

                Kommentar


                • #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.

                  Kommentar


                  • #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?
                    Zuletzt geändert von ghostnw; 25.12.2008, 22:21.

                    Kommentar

                    Lädt...
                    X