DATE_FORMAT()
restituisce una stringa, non una data. Passaggio di 3 argomenti stringa a BETWEEN
... chissà cosa tornerà.
Per ripristinare il codice, usa:
$week_start = date('Y-m-d',time()+( 1 - date('w'))*24*3600);
$week_end = date('Y-m-d',time()+( 7 - date('w'))*24*3600);
per formattare le date nel modo previsto da MySQL e:
WHERE
start_date BETWEEN '".$week_start."' AND '".$week_end."'
nella query.
Oppure, se preferisci un approccio orientato agli oggetti, fai qualcosa del genere:
$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);
Quindi nella tua query fai:
WHERE
start_date
BETWEEN '".$week_start->format('Y-m-d')."'
AND '".$week_end->format('Y-m-d')."'
Quindi per tutto il resto, puoi fare eco al formato come desideri:
echo $date->format('d-m-Y'); // etc