Werktage zu einem Datum addieren

  • Ok, also von der Laufzeit her ist deine Funktion tatsächlich nen Eck schneller als die strtotime()-Variante.
    Du hattest allerdings noch einen kleinen Fehler drin. Bei 6 Werktagen pro Woche darfst du auch nur durch 6 dividieren, nicht durch 7, um auf die Anzahl der Wochen zu kommen.
    An meine Bedürfnisse (= 5 Werktage pro Woche) angepasst sieht es dann so aus:

    PHP
    function getEndDate($start, $tage) {
      $w = date('w', $start);
      $start += 86400 * floor($tage + (2*(($w + $tage) / 5)));
      return date("d.m.Y",$start);
    }


    Liefert jetzt korrekte Ergebnisse und ist von der Laufzeit her die schnellste Lösung.
    Danke. :)

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Also bei mir klappt das nicht. Wenn das so einfach wäre... :mrgreen:
    Aber mit dem / 6 hattest du Recht. Übrigens hatte ich neben der 7 noch einen Fehler: Ich hatte den Samstag an Stelle des Sonntags genommen. :D

    So, habe es jetzt richtig hinbekommen, musste sehr lange grübeln:


    Ich habe mal den ganzen Weg hingeschrieben, dann versteht man es auch. Es werden auf jeden Fall zwei Dinge klar:
    -Die Funktion getEndDate ist stets drei mal schneller als die Variante mit strtotime (Ich habe es für 1, 10, 100 und für 1000 ausprobiert ;))
    -Die Variante mit strtotime erzeugt keine richtige Ausgabe :lol:

    Viele liebe Grüße
    The User

  • Also bei mir klappt das nicht. Wenn das so einfach wäre... :mrgreen:
    [...]
    -Die Variante mit strtotime erzeugt keine richtige Ausgabe :lol:

    Viele liebe Grüße
    The User


    Bei den beiden Punkten verstehe ich noch nicht ganz was du meinst.

    Ich hatte mir das Testscript hier mal auf die schnelle zusammengeschustert gehabt, da passen alle Ausgaben und Ergebnisse für alle Funktionen:

    War halt nur zum schnellen testen gedacht, nichts schönes. ;)

    Ich verwende jetzt deine Funktion, ist halt am schnellsten. :)

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Probiers doch einfach mal aus:
    In 4 Werktagen ist der 22. 4. 2009.
    Ich vergleiche mit verschiedenen Funktionen:
    Nr.1 strtotime:

    PHP
    function get_endday($start, $tage) {
      $time= strtotime('+'.((int)$tage).' weekday',$start);
        $enddatum = date("d.m.Y",$time);
        return $enddatum;  
    }
    echo get_endday(time(), 4);


    Ausgabe:

    Zitat

    20.04.2009


    => falsch

    Nächste Version, deine zur Zeit bevorzugte:

    PHP
    function getEndDate($start, $tage) {
      $w = date('w', $start);
      $start += 86400 * floor($tage + (2*(($w + $tage) / 5)));
      return date("d.m.Y",$start);
    }
    echo getEndDate(time(), 4);


    Ausgabe:

    Zitat

    23.04.2009


    => falsch

    Die Version in meinem letzten Post (nur die erste Funktion, der Rest war zum probieren und um alte Sachen klarzustellen):

    PHP
    function getEndDate($start, $tage) {
      $w = date('w', $start);
      return date('d.m.Y', $start += 86400 * ($tage + 2*(floor(($tage + 2* $w)/5)-1)));
    }
    echo getEndDate(time(), 4);


    Ausgabe:

    Zitat

    22.04.2009


    => richtig, auch wenn die Funktion etwas komplizierter ist.
    Nur das wollte ich sagen. ;)

    Viele liebe Grüße
    The User

    PS:
    Sorry, das stimmt auch nicht. Für Morgen klappt es nicht.
    Ich muss die Wochenendfunktion nochmal überarbeiten. ;)

  • Das ist komisch. ^^
    Mit meinem geposteten Script kriege ich bei allen 4 Funktionen immer das richtige Ergebnis, auch bei 4 Tagen.
    Da ist das Ergebnis überall der 20.04. was auch korrekt ist, da ich als Startdatum ja fix den 14.04. habe und nicht das heutige Datum.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook