Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde Galera.
No meu Banco MySQL tenho itens cadastrados e na tabela possuo duas colunas Datetime Data_Inicio e Data_Fim.
Quando eu insiro os dados nessa coluna, eles ficam armazenados da seguinte forma como no exemplo.
Data_Inicio: 2018-03-08 00:00:00
Data_Fim: 2018-03-12 00:00:00
Na hora do select eu preciso por nos campos Data Inicio e Data Fim o intervalo de data que desejo filtrar, porém, pelo o que percebi, ele está levando em consideração somente os dias. Não leva em consideração Mes nem Ano pro Filtro.
No filtro eu faço:
Data Inicio: 08/03/2018 salvo na variavel $dlinicio
Data Fim: 12/03/2018 salvo na variavel $dlfim
Minha Query está assim:
if($dlinicio && $dlfim)
{
$consulta = mysql_query("SELECT ordem, pedido, operacao, inicio_prev, fim_prev, inicio_prod, fim_prod FROM pixie_andon_nc where DATE_FORMAT(inicio_prev, '%d/%m/Y') >= '$dlinicio' and DATE_FORMAT(fim_prev, '%d/%m/%Y') <= '$dlfim' order by inicio_prev");
}
Creio que preciso converter nessa query a consulta, porém, tentei de várias formas e não consegui. Alguém poderia salvar minha tarde?
Obrigado!!!Ai sim parceiro, utilizei a primeira opção e deu certinho
Muito obrigado, agora está reconhecendo a diferença entre dias/mes/ano na comparação do intervalo de datas!
Valeu!!
Você não pode converter o campo de data na hora de realizar a comparação. Deve converter o valor que foi inserido e, assim então, comparar.
Isso se deve ao formato do DateTime no mysql. Quando você converte o formato para dd/mm/aaaa, o mysql entende que é apenas uma string qualquer. Já no formato aaaa-mm-dd, ai fica entendido que é um tipo Date.
Pode ser assim:
$date = '02/03/2018';
$dbDate = \DateTime::createFromFormat('d/m/Y' , $date)->format('Y-m-d');// utilizar essa data como parâmetro.
Ou usando diretamente no sql, similar ao que já realizou:
FROM pixie_andon_nc WHERE inicio_prev >= DATE_FORMAT('$dlinicio', '%Y-%m-%d') and fim_prev <= DATE_FORMAT('$dlfim', '%Y-%m-%d') ORDER BY inicio_prevOutro detalhe, uma das funções estava com o formato errado, faltando %:
DATE_FORMAT(inicio_prev, '%d/%m/Y')