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