Stefan Bechtold: Funktion um das Datum zu einer Kalenderwoche zu bestimmen

Beitrag lesen

So ich hab jetzt doch mal eine Funktion zusammengeschrieben.
Es geht nicht ganz so schlimm mit einer Schleife um, wie das normal der Fall ist, sprich: Erst wird ein Mittelwert gesucht der grob durch Teilen ermittelt wird und dann wird von diesem Wert aus weitergesucht. Das beschleunigt die Sache doch um einiges.

Wenn jemd. ein besseres Script hat begrüße ich dies nur zu gerne.

Hier mein Code:

function mktimefromkw($kw, $wtag, $jahr="", $stunde="", $minute="", $sekunde="") {
 if($wtag > 6) { $wtag -= 7; }                  // Wochentag konvertieren
   if(empty($jahr)) { $jahr = date("Y"); }        // Leeres Jahr füllen
   if(empty($stunde)) { $stunde = date("H"); }    // Leere Stunde füllen
   if(empty($minute)) { $minute = date("i"); }    // Leere Minute füllen
   if(empty($sekunde)) { $sekunde = date("s"); }  // Leere Sekunde füllen

// Startwerte festlegen (Näherungswerte)
   $tagx = 1;
   $monatx = ceil($kw / 4);
   $jahrx = $jahr;

while(true) {
      // Zeitwerte bestimmen
    $timex = mktime($stunde, $minute, $sekunde, $monatx, $tagx, $jahrx);
      $kwx = date("W", $timex);
      $wtagx = date("w", $timex);

// Kontroll-Abfragen
    if($kw == $kwx) {
       if($wtag == $wtagx) {
          return $timex;
            break;
         } elseif($wtag > $wtagx) {
          $wtag--;
         } elseif($wtag < $wtagx) {
          $wtag++;
         }
      } elseif($kw > $kwx) {
       $tagx -= 7;
         if($tagx <= 0) {
            $tagx += 30;
          $monatx--;
            if($monatx <= 0) {
             $monatx += 12;
             $jahrx--;
            }
         }
      } elseif($kw < $kwx) {
       $tagx += 7;
         if($tagx <= 0) {
            $tagx -= 30;
          $monatx++;
            if($monatx <= 0) {
             $monatx -= 12;
             $jahrx++;
            }
         }
      }
   }
}

Gruss Stefan