so, problem gelöst, hier mal mein Quellcode - vielleicht nützt er ja jemandem:
Nimm's nicht persönlich, aber auch wenn es tut, was es soll: Dieses Werk taugt bestenfalls als abschreckendes Beispiel.
$aktdatum = date("d.m.Y",$timestamp);
$tag = substr($aktdatum,0,2);
$monat = substr($aktdatum,3,2);
$jahr = substr($aktdatum,6,4);
$dat = "$jahr-$monat-$tag";
Das kannst du auch in einer Zeile haben:
$dat = date("Y-m-d", $timestamp);
function detailsDateFormat( $value )
{
$d = explode("-", $value);
$cdate = date ("l F j, Y", mktime (0,0,0,$d[1],$d[2],$d[0]));
$cdate benutzt du nirgendwo, Zeile ist überflüssig.
Weiterhin frage ich mich, warum du erst aus einem Zeitstempel eine Zeichenkette machst und dann in dieser Funktion die Zeichenkette wieder in einen Zeitstempel umwandelst. Den Umweg könntest du dir sparen.
// Wochentag des Monatsersten bestimmen:
$monatserster = date("l", mktime(0,0,0,$d[1]+1,01,$d[0]));// Datum des ersten Dienstags des nächsten Monats bestimmen:
switch ($monatserster)
{
case "Monday": $ersterdienstag = date ("d.m.Y", mktime (0,0,0,$d[1]+1,02,$d[0]));break;
case "Tuesday": $ersterdienstag = date ("d.m.Y", mktime (0,0,0,$d[1]+1,01,$d[0]));break;
case "Wednesday": $ersterdienstag = date ("d.m.Y", mktime (0,0,0,$d[1]+1,07,$d[0]));break;
case "Thursday": $ersterdienstag = date ("d.m.Y", mktime (0,0,0,$d[1]+1,06,$d[0]));break;
case "Friday": $ersterdienstag = date ("d.m.Y", mktime (0,0,0,$d[1]+1,05,$d[0]));break;
case "Saturday": $ersterdienstag = date ("d.m.Y", mktime (0,0,0,$d[1]+1,04,$d[0]));break;
case "Sunday": $ersterdienstag = date ("d.m.Y", mktime (0,0,0,$d[1]+1,03,$d[0]));break;
}
//echo $ersterdienstag;
Gottohweh.
Vielzeiliger Weg (mal mit date() statt getclock()):
switch (date("w", mktime(0, 0, 0, $d[1] + 1, 1, $d[0])))
case 0: $ersterdienstag = 3; // 0 = Sonntag -> Dienstag ist der 3.
break;
case 1: $ersterdienstag = 2; // 1 = Montag -> Dienstag ist der 2.
break;
case 2: $ersterdienstag = 1; // 2 = Dienstag -> Dienstag ist der 1.
break;
case 3: $ersterdienstag = 7; // usw.
break;
case 4: $ersterdienstag = 6;
break;
case 5: $ersterdienstag = 5;
break;
case 6: $ersterdienstag = 4;
break;
}
Wenigzeiliger Weg:
$ersterdienstag = 3 - date("w", mktime(0, 0, 0, $d[1] + 1, 1, $d[0]));
if ($ersterdienstag <= 0) {
$ersterdienstag += 7;
}
Den verwirrenden Unsinn, mit date() und mktime() erst wieder eine Zeichenkette zu basteln, lassen wir mal weg, denn in den nächsten Zeilen zerkloppst du dieselbige doch wieder in Einzelteile.
// Das Datum eine Woche zuvor berechnen:
$tag2 = substr($ersterdienstag,0,2);
$monat2 = substr($ersterdienstag,3,2);
$jahr2 = substr($ersterdienstag,6,4);$ergebnis = date ("d.m.Y", mktime (0,0,0,$monat2,$tag2-7,$jahr2));
Weniger umständlich, da ohne Umweg über eine Zeichenkette:
$vorwoche = mktime(0, 0, 0, $d[1] + 1, $ersterdienstag - 7, $d[0]);
return date("d.m.Y", $vorwoche);
Du scheinst eine Obszession für Zeichenketten zu haben. Dass du an solch aufwendigem Hin- und Hergebastel Freude hast, ist eine Sache, aber grundsätzlich ist es einfacher, mit einem Datumstyp zu arbeiten, in diesem Fall dem Unix-Zeitstempel.
Das ganze ist natürlich weder optimal noch kurz und knapp programmiert, aber dafür für mich selbst einigermaßen verständlich aufgebaut ;)
Nein, ganz im Gegenteil. Das ist ein heilloses Durcheinander von hinten durch die Brust ins Auge mit an bis zu siebenfacher Wiederholung der gleichen Anweisungen.