DATE_FORMAT()
gibt einen String zurück, kein Datum. Übergeben von 3 String-Argumenten an BETWEEN
... wer weiß, was das bringt.
Um Ihren Code rückwärts zu entschlüsseln, verwenden Sie:
$week_start = date('Y-m-d',time()+( 1 - date('w'))*24*3600);
$week_end = date('Y-m-d',time()+( 7 - date('w'))*24*3600);
um Ihre Daten so zu formatieren, wie es mySQL erwartet, und:
WHERE
start_date BETWEEN '".$week_start."' AND '".$week_end."'
in der Abfrage.
Oder wenn Sie einen objektorientierten Ansatz bevorzugen, tun Sie so etwas:
$week_start = new DateTime;
$week_end = new DateTime;
$week_start->setTimestamp(time()+( 1 - date('w'))*24*3600));
$week_end->setTimestamp(time()+( 7 - date('w'))*24*3600);
Dann tun Sie in Ihrer Abfrage:
WHERE
start_date
BETWEEN '".$week_start->format('Y-m-d')."'
AND '".$week_end->format('Y-m-d')."'
Dann können Sie für alles andere das Format wie gewünscht wiederholen:
echo $date->format('d-m-Y'); // etc