Häufigkeit von Wochentagen in Zeitraum ermitteln

Hallo,

ich habe folgendes Problem:

Ich habe einen Anfangs-Zeitpunkt und einen End-Zeitpunkt. Ich suche nun nach einer eleganten (!) Möglichkeit, herauszufinden, wie oft ein Wochentag zwischen diesen Daten vorkommt.

Beispiel: Im Zeitraum 01.10.2006 - 31.10.2006 kommt der Montag 5-mal und der Mittwoch 4-mal vor.

Momentan gehe ich so vor, dass ich in einer while-Schleife prüfe, ob ich mich noch im Zeitraum befinde und alle Tage einzeln durchzähle. Sobald der Wochentag erreicht ist, inkrementiere ich einen Counter. Das ist sehr einfach, aber ziemlich unelegant und eine pure Verschwendung von Rechenzeit.

function getWochentagBetween($wt, $von, $bis) {
$laufdatum = $von;
$kontrolldatum = $bis;
$count = 0;
while ($laufdatum

Hallo,
so oder ähnlich aus dem Bauch heraus:

($bis-$von) mod 7 = anzahl der wochen plus rest

dann noch feststellen was $bis und $von für wochentage waren und die entsprechend um einen Tag korrigieren.

$von und $bis vorher in ganze Tage wandeln wg. subtraktion.

So würde ich anfangen.

HTH
Q

Hallo,

ein bisschen anders habe ich es jetzt doch gemacht. Wenn jemandem noch eine mögliche Vereinfachung einfällt, immer her damit. :smile:

Hier mein Code, vielleicht kann ihn noch jemand gebrauchen:

$wochentag = 2; 
$von = gmmktime(0,0,0,10,10,2006); 
$bis = gmmktime(0,0,0,10,27,2006); 

//von-Datum auf naechsten Wochentag bringen:
if ($wochentag gmstrftime("%w", $von)) {
 $von += ($wochentag - gmstrftime("%w", $von))\*60\*60\*24;
}

// bis-Datum auf letzten Wochentag bringen:
$bis -= abs(7 - $wochentag + gmstrftime("%w", $bis))%7 \*24\*60\*60;

$anzahl = ($bis-$von)/(60\*60\*24\*7)+1; // Anzahl des Wochentags im Zeitraum

Danke für die Antwort, viele Grüße
Stefan

<?php $von = gmmktime(0,0,0,10,10,2006); <br />$bis = gmmktime(0,0,0,10,27,2006); 

$tage = ($bis-$von)/(60\*60\*24);
$wochen = floor($tage/7);
$rest = ($tage/7-$wochen)\*7;

$starttag = gmstrftime("%w", $von);
for ($i=0;$i {
 $tageswert = gmstrftime("%w", $von+($i\*60\*60\*24 ));
 $days[$tageswert] = 1;
 }

for ($i=0;$i\<7;$i++)
 {
 $days[$i] = $days[$i] + $wochen;
 echo $days[$i]."
"; //das ist nun nur die Ausgabe...
 }
?\>

Bringt leider falsche Ergebnisse:
von 01.10.2006 bis 31.10.2006:

Array
(
 [0] =\> 5
 [1] =\> 5
 [2] =\> 4
 [3] =\> 4
 [4] =\> 4
 [5] =\> 4
 [6] =\> 4
)

Es müsste aber sein:

Array
(
 [0] =\> 5
 [1] =\> 5
 [2] =\> 5
 [3] =\> 4
 [4] =\> 4
 [5] =\> 4
 [6] =\> 4
)

Danke für die Mühe auf jeden Fall! Für mich ist die Rückgabe eines Arrays auch weniger geeignet, da die Zeiträume von/bis auch schwanken und ich ohnehin für jeden Fall einzeln prüfen muss.

Viele Grüße
Stefan

kk hatte nen kleinen Fehler drin…

for ($i=0;**$i;$i++)  
 {  
 $tageswert = gmstrftime("%w", $von+($i\*60\*60\*24 ));  
 $days[$tageswert] = 1;  
 }**  

dann klappts…

Danke für die Mühe auf jeden Fall! Für mich ist die Rückgabe
eines Arrays auch weniger geeignet, da die Zeiträume von/bis
auch schwanken und ich ohnehin für jeden Fall einzeln prüfen
muss.

und?
Du hast ja nicht gesagt, was Du haben willst…
Also ist ein Array in dem steht wie oft jeder Tag vorkommt wohl das beste überhaupt…

$days[0] = anzahl sonntage usw…

Ciaó
Munich