Werktage über mehrere Monate berechnen!

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

  • Werktage über mehrere Monate berechnen!

    Hallo, mit folgendem Code kann ich für jedes einzellne Monat die tatsächliche Arbeitszeit berechnen.

    Ich möchte aber über das Monat hinaus das berechnen, sprich, ich möchte wissen, wieviele Werktage es vom z.B. 1.1.2006 bis 31.12.2006 sind.

    Leider weiss ich nicht, wass ich da an diesem Code ändern muss, so dass auch das Enddatum hineinkommt.

    PHP-Code:
    $Jahr=2006;
    $Monat=1;
    $Tag=1;
    $MonatEnde=12;
    $TagEnde=31;
    $JahrEnde=2006;

    function 
    ArbeitstageErmitteln($Jahr$Monat$JahrEnde$MonatEnde$TagEnde)

      for(
    $i=1$i<=date("t"mktime(000$Monat$Tag$Jahr)); $i++)
        {
        if(
    date("w"mktime(000$Monat$i$Jahr))!=&& date("w"mktime(000$Monat$i$Jahr))!=6)
          {
          
    $Anzahl++;
          }
        }
      return 
    $Anzahl;
    }

    echo 
    ArbeitstageErmitteln($Jahr$Monat$JahrEnde$MonatEnde$TagEnde); 
    Kann mir da jemand unterstützen?
    LG, m-werk

  • #2
    du musst deine Funktion in eine Schleife einbinden, die vom Start- bis zum End-Datum läuft
    it's not a bug,
    it's a feature!

    Kommentar


    • #3
      dieses Script funktioniert aber doch wohl nicht, oder?

      $Tag liegt nicht im scope der Funktion und ist ihr deshalb unbekannt.

      Kommentar


      • #4
        dieses Script funktioniert aber doch wohl nicht, oder?

        $Tag liegt nicht im scope der Funktion und ist ihr deshalb unbekannt.
        Sicherlich liegt $Tag drinn.


        for($i=1; $i<=date("t", mktime(0, 0, 0, $Monat, $Tag, $Jahr)); $i++)

        du musst deine Funktion in eine Schleife einbinden, die vom Start- bis zum End-Datum läuft
        Und da steh ich jetzt an.

        Bitte um hilfe!!
        LG, m-werk

        Kommentar


        • #5
          Original geschrieben von m-werk
          Sicherlich liegt $Tag drinn.


          for($i=1; $i<=date("t", mktime(0, 0, 0, $Monat, $Tag, $Jahr)); $i++)
          $Tag wird zwar innerhalb der Funktion verwendet, ihr aber nicht uebergeben, soll heissen, $Tag fehlt in dieser Zeile:
          function ArbeitstageErmitteln($Jahr, $Monat, $JahrEnde, $MonatEnde, $TagEnde)

          Kommentar


          • #6
            OK, sorry, hab ich übersehen.

            Leider weiss ich noch immer nicht, wie ich eine schleife vom Startdatum bis zum Enddatum über diese Funktion legen kann.
            LG, m-werk

            Kommentar


            • #7
              Original geschrieben von m-werk
              Leider weiss ich noch immer nicht, wie ich eine schleife vom Startdatum bis zum Enddatum über diese Funktion legen kann.
              Dann überleg' (weiter).

              Immer nur mit "ich weiss nicht" und "ich kann nicht" zu kommen, ist doch wohl etwas wenig.

              Also zeige bitte zumindest einen Ansatz. Wenn dieser noch Fehler enthält, kann man ihn ja ggf. gemeinsam verbessern.
              Aber gar kein eigener Vorschlag ist mir zumindest zu wenig.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Ich könnte mir dabe nur eines vorstellen.

                Zuerst muss ich mal die Startzeit und Endzeit in ein Timestamp umwandeln.

                So. Du hast geschrieben, dass ich diese Funktion in eine Schleife packen muss.


                Hier mal mein Ansatz:

                Vor der Funktion:

                PHP-Code:
                $d1 date('t'mktime(000$Monat+10$Jahr));

                for(
                $i1=1;$i1<=$d1;$i1++){
                $itest=str_pad($i12'0'STR_PAD_LEFT);

                $Monatsdurchlauf=$Jahr.$itest.$Tag;

                function......
                .....

                Ich kann mir aber nicht vorstellen, das das funktionieren kann.

                ------------------
                Tut es auch nicht.
                Zuletzt geändert von m-werk; 13.12.2006, 08:47.
                LG, m-werk

                Kommentar


                • #9
                  1. Startdatum als Timestamp
                  -- Schleifenstart --
                  2. Aufdröseln des ganzen in jahr, monat und tag
                  3. Aufruf deiner funktion
                  4. zu dem Timestamp 1 Tag dazu addieren
                  5. Wenn Timestamp jetzt >= Endedatum beende die Schleife, ansonsten weiter bei 2.
                  it's not a bug,
                  it's a feature!

                  Kommentar


                  • #10
                    so hab ich jetzt mal angefangen:

                    PHP-Code:
                    $startdatum=mktime(0,0,0,$Monat,$Tag,$Jahr);
                    $enddatum=mktime(0,0,0,$MonatEnde,$TagEnde,$JahrEnde);

                    for(
                    $i1=$startdatum;$i1<=$enddatum;$i1++){
                    $test1=date("d.m.Y"$i1);
                    echo 
                    "$test1<br>";

                    Diese schleife kann ich aber so nicht verwenden, da der timestamp hier immer um 1 erhöht wird. das wird alleine für den 1.1.2006 unendlich.
                    LG, m-werk

                    Kommentar


                    • #11
                      Original geschrieben von m-werk
                      Diese schleife kann ich aber so nicht verwenden, da der timestamp hier immer um 1 erhöht wird. das wird alleine für den 1.1.2006 unendlich.
                      Nicht unendlich, sondern so viele Male, wie der Tag Sekunden hat. Du könntest den Timestamp um so viel erhöhen, wie ein Tag Sekunden hat, um auf den jeweils nächsten Tag zu kommen. Allerdings gibts da dann wieder kleine Problem bezüglich Sommer-/Winterzeit, aber zum Üben hilft es vielleicht erstmal weiter.

                      Kommentar


                      • #12
                        du kannst auch nicht einfach so zu einem Timestamp eine 1 addieren.
                        Ausserdem solltest du eine while-Schleife benutzen, da du ja gar nicht weisst, wie oft deine Schleife durchlaufen wird.

                        Such mal nach "datumsberechnung" oder "rechnen mit Datum".
                        it's not a bug,
                        it's a feature!

                        Kommentar


                        • #13
                          ich schnalls einfach nicht. ich komm nicht dahinter. Es hilft nichts.

                          Ich habe ein while (true) vor der schleife gesetzt. Das mit den timestring hab ich noch nicht in meinem kopf. Ich versuch das ding schon seit 2 Tagen zum laufen zum bringen, aber hänge totall.
                          LG, m-werk

                          Kommentar


                          • #14
                            Zerlege ein Problem immer in Teilaufgaben, wenn du nicht weiter kommst - so lange, bis diese klein genug sind, dass du sie einzeln zu lösen vermagst.

                            Wo hängst du denn jetzt konkret?
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              Ich habe ein while (true) vor der schleife gesetzt
                              und damit eine Endlosschleife produziert, wenn ich dich richtig verstehe.
                              Du sollst die for-Schleife durch eine while-Schleife ERSETZEN!
                              it's not a bug,
                              it's a feature!

                              Kommentar

                              Lädt...
                              X