Wer die Nettoarbeitstage() Funktion von Excel kennt weiß wie gut man diese gebrauchen kann. Networkdays() im englischen MS Excel.
Der Funktion werden Start und Enddatum gegeben, sowie optional eine Auflistung mit Feiertagen. Die Funktion liefert die seitdem vergangenen Werktage zurück.

Funktion

Hier ist eine Umsetzung der Funktion in php!

function networkdays($start, $end="", $freedays = "" ){
	$s = date_parse($start);
	if ($end == "") {
		$end = date("d.m.Y",time());
	}
	$e = date_parse($end);
	//Timestamps generieren für Start und Ende
	$ts_start = mktime(0, 0, 0, $s["month"], $s["day"], $s["year"]);
	$ts_end = mktime(0, 0, 0, $e["month"], $e["day"], $e["year"]);
	//Wenn Start und Ende vertauscht -> vertauschen
	if ($ts_end < $ts_start) {
		$x = $ts_start;
		$ts_start = $ts_end;
		$ts_end = $x;
	}
	//Feiertage Array
	if (is_array($freedays)) {
		while ( $da = each($freedays) ) {
			$d = date_parse($da['value']);
			$ft[] = mktime(0, 0, 0, $d["month"], $d["day"], $d["year"]);
		}
	} else{
		$ft = array();
	}
	//start
	$days = 0;
	while ( $ts_start < $ts_end) { //check den Wochentag! $wd = date("w",$ts_start); if ( !in_array($ts_start,$ft) ) { if ($wd > 0 and $wd < 6) {
				$days++;
			}
		}
		$ts_start = $ts_start + (60*60*24);
	}
	return $days;
}

Anwendung

Die Angabe eines Arrays mit Feiertagen ist optional!

echo networkdays("02.10.2013","25.10.2013");

Liefert: 17

Feiertage in ein Array setzen:

$feiertage = array("03.10.2013","10.10.2013");

Anwendung:

echo networkdays("02.10.2013","25.10.2013",$feiertage);

Liefert: 15