DATE_FORMAT()
renvoie une chaîne, pas une date. Passer 3 arguments de chaîne à BETWEEN
... qui sait ce que cela va donner.
Pour désosser votre code, utilisez :
$week_start = date('Y-m-d',time()+( 1 - date('w'))*24*3600);
$week_end = date('Y-m-d',time()+( 7 - date('w'))*24*3600);
pour formater vos dates comme mySQL l'attend, et :
WHERE
start_date BETWEEN '".$week_start."' AND '".$week_end."'
dans la requête.
Ou si vous préférez une approche orientée objet, procédez comme suit :
$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);
Ensuite, dans votre requête, faites :
WHERE
start_date
BETWEEN '".$week_start->format('Y-m-d')."'
AND '".$week_end->format('Y-m-d')."'
Ensuite, pour tout le reste, vous pouvez répéter le format comme vous le souhaitez :
echo $date->format('d-m-Y'); // etc