DATE_FORMAT()
mengembalikan string, bukan tanggal. Melewati 3 argumen string ke BETWEEN
... siapa yang tahu apa yang akan kembali.
Untuk membatalkan kode Anda, gunakan:
$week_start = date('Y-m-d',time()+( 1 - date('w'))*24*3600);
$week_end = date('Y-m-d',time()+( 7 - date('w'))*24*3600);
untuk memformat tanggal Anda seperti yang diharapkan mySQL, dan:
WHERE
start_date BETWEEN '".$week_start."' AND '".$week_end."'
dalam kueri.
Atau jika Anda lebih suka pendekatan berorientasi objek, lakukan sesuatu seperti ini:
$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);
Kemudian dalam kueri Anda lakukan:
WHERE
start_date
BETWEEN '".$week_start->format('Y-m-d')."'
AND '".$week_end->format('Y-m-d')."'
Kemudian untuk yang lainnya, Anda dapat menggemakan format sesuai keinginan Anda:
echo $date->format('d-m-Y'); // etc