DATE_FORMAT()
trả về một chuỗi, không phải ngày. Chuyển 3 đối số chuỗi cho BETWEEN
... ai biết điều gì sẽ trở lại.
Để gỡ bỏ mã của bạn, hãy sử dụng:
$week_start = date('Y-m-d',time()+( 1 - date('w'))*24*3600);
$week_end = date('Y-m-d',time()+( 7 - date('w'))*24*3600);
để định dạng ngày tháng của bạn theo cách mà mySQL mong đợi và:
WHERE
start_date BETWEEN '".$week_start."' AND '".$week_end."'
trong truy vấn.
Hoặc nếu bạn thích cách tiếp cận hướng đối tượng, hãy làm như sau:
$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);
Sau đó, trong truy vấn của bạn, hãy thực hiện:
WHERE
start_date
BETWEEN '".$week_start->format('Y-m-d')."'
AND '".$week_end->format('Y-m-d')."'
Sau đó, đối với mọi thứ khác, bạn có thể lặp lại định dạng theo cách bạn muốn:
echo $date->format('d-m-Y'); // etc