DATE_FORMAT()
returnerar en sträng, inte ett datum. Skickar 3 strängargument till BETWEEN
... vem vet vad det kommer att ge tillbaka.
För att ta bort koden bakåt, använd:
$week_start = date('Y-m-d',time()+( 1 - date('w'))*24*3600);
$week_end = date('Y-m-d',time()+( 7 - date('w'))*24*3600);
att formatera dina datum på det sätt som mySQL förväntar sig, och:
WHERE
start_date BETWEEN '".$week_start."' AND '".$week_end."'
i frågan.
Eller om du föredrar ett objektorienterat tillvägagångssätt, gör något så här:
$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);
Gör sedan i din fråga:
WHERE
start_date
BETWEEN '".$week_start->format('Y-m-d')."'
AND '".$week_end->format('Y-m-d')."'
Sedan för allt annat kan du upprepa formatet som du vill:
echo $date->format('d-m-Y'); // etc