Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PDO PHP - Encontre todas as linhas entre 2 datas - mostra em branco


DATE_FORMAT() retorna uma string, não uma data. Passando 3 argumentos de string para BETWEEN ... quem sabe o que isso vai retornar.

Para destravar seu código, use:
$week_start = date('Y-m-d',time()+( 1 - date('w'))*24*3600);  
$week_end =  date('Y-m-d',time()+( 7 - date('w'))*24*3600); 

para formatar suas datas da maneira que o mySQL espera e:
WHERE 
  start_date BETWEEN '".$week_start."' AND '".$week_end."'

na consulta.

Ou se você preferir uma abordagem orientada a objetos, faça algo assim:
$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);

Então na sua consulta faça:
WHERE 
  start_date 
      BETWEEN '".$week_start->format('Y-m-d')."'
      AND '".$week_end->format('Y-m-d')."'

Então, para todo o resto, você pode ecoar o formato como desejar:
echo $date->format('d-m-Y'); // etc