Also bei mir klappt das nicht. Wenn das so einfach wäre...
[...]
-Die Variante mit strtotime erzeugt keine richtige AusgabeViele 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:
PHP
function get_enddate($start, $tage) {
$wochen = floor($tage / 5);
$rest = $tage % 5;
$tage += ($wochen * 2);
$ende = $start + ($tage * 86400);
$ende += (date("w", $ende)==6 || !date("w",$ende) || (date("w",$ende)-$rest)<1) ? 172800 : 0;
$enddatum = date("d.m.Y",$ende);
return $enddatum;
}
function addDays($time, $days) {
for($i = 0; $i < $days; $i++) {
$time += 86400;
while(date("w", $time) < 1 || date("w", $time) == 6)
$time += 86400;
}
$enddatum = date("d.m.Y",$time);
return $enddatum;
}
function get_endday($start, $tage) {
$time= strtotime('+'.((int)$tage).' weekday',$start);
$enddatum = date("d.m.Y",$time);
return $enddatum;
}
function getEndDate($start, $tage) {
$w = date('w', $start);
$start += 86400 * floor($tage + (2*(($w + $tage) / 5)));
return date("d.m.Y",$start);
}
echo "<form method='post' action=''>Tage: <input type='text' name='tage' value='$days'><input type='submit' value='ok'></form>";
$time = mktime(1,0,0,4,14,2009);
$days = isset($_POST['tage']) ? $_POST['tage'] : 0;
$time_start = microtime(true);
echo "Funktion 1: ".get_enddate($time,$days)."<br>";
$time_end = microtime(true);
$time1 = $time_end - $time_start;
echo "Laufzeit: ".$time1;
$time_start = microtime(true);
echo "<br><br>Funktion 2: ".addDays($time,$days)."<br>";
$time_end = microtime(true);
$time1 = $time_end - $time_start;
echo "Laufzeit: ".$time1;
$time_start = microtime(true);
echo "<br><br>Funktion 3: ".get_endday($time,$days)."<br>";
$time_end = microtime(true);
$time1 = $time_end - $time_start;
echo "Laufzeit: ".$time1;
$time_start = microtime(true);
echo "<br><br>Funktion 4: ".getEndDate($time,$days)."<br>";
$time_end = microtime(true);
$time1 = $time_end - $time_start;
echo "Laufzeit: ".$time1;
Alles anzeigen
War halt nur zum schnellen testen gedacht, nichts schönes.
Ich verwende jetzt deine Funktion, ist halt am schnellsten.