Problem mit Zeitberechnung

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

  • Problem mit Zeitberechnung

    Hallo zusammen,

    es geht um folgendes Problem: Ich möchte den aktuellen Abrechnungszeitraum berechnen. Dieser ist - logischerweise - von dem Tag abhängig, an dem sich der Benutzer angemeldet hat.
    Der Zeitraum kann 14, 30,90 Tage (eigentlich alles, hautpsache in Tagen) sein.

    Es sieht also z.B. so aus: Der Benutzer meldet sich am 15.3.05 an. Heute haben wir den 17.4.05. In welchem Abrechnungszeitraum befinden wir uns, wenn das Abrechnungsintervall 14 Tage beträgt??

    Hab hier folgenden Code:
    (Hab meine Kommentare dringelassen, damit das schnell nachvollziehbar ist!)

    PHP-Code:
       // Wenn das Abrechnungsinterval monatlich ist, also immer -
       // am 1. eines Monats beginnt, muss der erste des aktuellen
       // Monats genommen werden
          
    if($txt_Abrechnungsinterval == "Monatsanfang") {

             
    $time_AbrechnungsStart mktime(0,0,0,date("m"),1,date("Y"));

             
    $time_AbrechnungsEnde $time_AbrechnungsStart + ($int_Laufzeit*24*60*60);

       
    // Andernfalls muss der individuelle Abrechungszeitraum ---
       // ermittelt werden ---------------------------------------
          
    } else {

          
    // Prüfen, ob das aktuelle Datum mit dem Beginn eines neuen
          // Abrechnungszeitraums zusammenfällt ---------------------

             
    if(date("d"$time_Freischaltung) == date("d")) {

                
    // Fällt zusammen, also beginnt der neue Abrechnungs-
                // zeitraum heute
                   
    $time_AbrechnungsStart mktime(0,0,0,date("m"), date("d"), date("Y"));

          
    // Wenn es nicht zusammenfällt, muss das Datum berechnet ---
          // werden --------------------------------------------------

             
    } else {

                
    // Den korrekten Monat berechnen. --------------------
                // Wenn zum Tag der Freischaltung und dem aktuellen --
                // Monat die Laufzeit addiert wird, liegt das aktuelle
                // Datum dann noch drin? Wenn ja, wird der aktuelle --
                // Monat genommen, andernfalls wird der letzte Monat -
                // genommen. -----------------------------------------
                // Gleichzeitig wird das Jahr berechnet. Wenn der ----
                // aktuelle Monat "Januar" ist und das Datum nicht ---
                // im Zeitraum liegt, dann wird das vorherige Jahr ---
                // verwendet, andernfalls das aktuelle Jahr ----------

                   
    if((mktime(0,0,0date("m"),date("d",$time_Freischaltung), date("Y")) +  $int_Laufzeit/24/60/60) <
    mktime(0,0,0,date("m"),date("d"),date("Y"))) {
                      
    $time_Monat date("m"); // Liegt im Zeitraum
                      
    $time_Jahr date("Y");
                   } else {
                      
    $time_Monat date("m")-1// Liegt nicht drin
                      
    if($time_Monat == "01")
                         
    $time_Jahr date("Y")-1;
                      else
                         
    $time_Jahr date("Y");
                   }

                   
    $time_AbrechnungsStart mktime(0,0,0$time_Monatdate("d",$time_Freischaltung), $time_Jahr);

             }

             
    // Nun wird das Enddatum des aktuellen Abrechnungszeit-
             // raums berechnet. Dazu wird zum Startdatum einfach die
             // Laufzeit hinzuaddiert.
                
    $time_AbrechnungsEnde $time_AbrechnungsStart + ($int_Laufzeit*24*60*60);

          }

          
    // Rückgabe der beiden Werte
             
    return array($time_AbrechnungsStart$time_AbrechnungsEnde); 
    Das Problem ist, dass als Referenztag nicht der Tag der Bestellung nicht korrekt verwendet wird.

    Wenn sich der Kunde am 15.3. angemeldet hat, dann wären wir
    15.3. + 14 = 29.3.
    29.3. + 14 = 12.4.
    12.4. + 14 = 26.4

    Heute ist der 17.4., wird sind also im Intervall vom 12.-26.4. Das Script oben zeigt aber den 15.4. bis 29.4 an. Es wird zwar der Starttag genommen, aber eben nicht dazugezählt.

    Wie kann man das elegant lösen?? Hat da jemand schon was?

    1000 Dank!

    strauberry

  • #2
    Ist die Frage so schwer oder so blöd gestellt

    Kommentar


    • #3
      bachte die regeln bitte:
      http://www.php-resource.de/forum/sho...threadid=50454

      wenn du die time()-werte speicherst, kannst du deinen abrechnungsraum locker definieren und damit rechnen (60*60*24*14 oder so).

      Kommentar


      • #4
        Wieso hab ich die Regeln nicht beachtet?

        Gerade um das locker berechnen geht es ja grad!

        Kommentar


        • #5
          ich muss horizontal scrollen und das stört die leserlichkeit.

          ich helfe dir: 60*60*24*14 = 1209600.
          d.h. wenn soviele sekunden nach der anmeldung vergehen, beginnt ein neuer abrechnungsraum.

          Kommentar


          • #6
            Habs jetzt so gelöst:

            PHP-Code:
            function AktuellerAbrechnungszeitraum($time_Freischaltung$int_Laufzeit,
             
            $txt_Abrechnungsinterval, &$time_Enddatum, &$time_Startdatum) {

               
            // Wenn das aktuelle Datum größer ist als das Ende des neuen
               // Abrechnungszeitraums, wird ein neuer Abrechnungszeitraum
               // dazugezählt.

               
            if(!isset($time_Enddatum))
                  
            $time_Enddatum $time_Freischaltung + ($int_Laufzeit*24*60*60);
               else
                  
            $time_Enddatum+= ($int_Laufzeit*24*60*60);

               if(
            $time_Enddatum time()) {

                  
            // Das aktuelle Datum ist größer als das Enddatum des ---
                  // neuen Abrechnungszeitraums, also muss ein Zeitraum ---
                  // weitergerechnet werden. ------------------------------
                     
            AktuellerAbrechnungszeitraum($time_Freischaltung$int_Laufzeit
            $txt_Abrechnungsinterval$time_Enddatum$time_Startdatum);

               } else {

                  
            // Das aktuelle Datum liegt vor dem Ende des neuen Ab- --
                  // rechnungszeitraums, also ist das Endddatum gefunden. -
                     
            $time_Startdatum $time_Enddatum - ($int_Laufzeit*24*60*60);
               }


            Kommentar

            Lädt...
            X