Hallo,
Sorry, ich finde leider keine schonende Methode das zu sagen, daher sage ich's direkt: Der Code ist Müll. Er Code ist ineffizient (für jeden Wochentag einen eigenen case, wenn einfache Arithmetik ausreicht?) und fliegt zudem bei Sommer- und Winterzeitumstellungen potentiell auf die Schnauze. Zudem ist j.n.Y nicht unbedingt sinnvoll als Datumsformat, um es einer Datenbank zu übergeben - Y-m-d ist besser.
Wenn der Code also in PHP und nicht im SQL sein soll (entgegen meiner Lösung), dann würde folgender PHP-Code wesentlich besser geeignet sein:
$jetzt = time ();
$wochentag = date ('w', $jetzt);
$tage = (7 - $wochentag) % 7;
// ende des wochenendes
$montag = strtotime ('00:00:00 + '.($tage + 1).' days');
// start des wochenendes
$samstag = strtotime ('- 2 days', $montag);
// datum berechnen
$startDatum = date ('Y-m-d', $samstag);
$endDatum = date ('Y-m-d', $montag);
// SQL-select ausgeben
$query = "SELECT ... WHERE datum >= '".mysql_real_escape_string ($startDatum)."' AND datum < '".mysql_real_escape_string ($endDatum)."'";
Zur Erläuterung:
$jetzt = time ();
Aktuelles Datum holen und sich merken.
$wochentag = date ('w', $jetzt);
Den Wochentag des aktuellen Datums bestimmen. Hierbei ist 0 = Sonntag und 6 = Samstag.
$tage = (7 - $wochentag) % 7;
Die Anzahl an verbleibenden Tagen bis zum Sonntag (Ende des Wochenendes) berechnen - siehe meine andere Funktion.
$montag = strtotime ('00:00:00 + '.($tage + 1).' days', $jetzt);
Wir brauchen das Datum von Montag um Mitternacht. Hier wird explizit strtotime() genutzt und *NICHT* auf den Timestamp einfach 86400 addiert / subtraiert, weil nicht jeder Tag 86400 Sekunden hat (bei der Umstellung von Sommer- auf Winterzeit nämlich nicht!).
Zur genauen Erläuterung, was strtotime() hier macht:
strtotime('00:00:00', $jetzt) gibt den Timestamp um Mitternacht des Tages zurück, an dem sich $jetzt befindet (d.h. wenn $jetzt bereits Mitternacht wäre, würde es $jetzt zurückgeben).
Wenn man jetzt noch zusätzlich z.B. ' + 2 days' anängt, dann wird auf das aktuelle Datum 2 Tage addiert. Dies geschieht jedoch NICHT über Vielfache von 86400, sondern über richtige Kalenderberechnung - sprich: Sommer- und Winterzeitumstellungen werden korrekt berücksichtigt.
$samstag = strtotime ('- 2 days', $montag);
Hier wird nun der Start des Wochenendes gesucht.
$startDatum = date ('Y-m-d', $samstag);
$endDatum = date ('Y-m-d', $montag);
Hier werden die Daten jetzt so formatiert, das die Datenbank sie versteht.
$query = "SELECT ... WHERE datum >= '".mysql_real_escape_string ($startDatum)."' AND datum < '".mysql_real_escape_string ($endDatum)."'";
Und hier wird exemplarisch die Abfrage zusammengebaut.
Viele Grüße,
Christian