O Laravel 4+ oferece estes métodos:
whereDay()
, whereMonth()
, whereYear()
(#3946
) e whereDate()
(#6879
). Eles fazem o SQL
DATE()
trabalhe para você e gerencie as diferenças do SQLite. Seu resultado pode ser alcançado assim:
->whereDate('date', '<=', '2014-07-10')
Para mais exemplos, veja a primeira mensagem de #3946 e este artigo Laravel Daily .
Atualização: Embora o método acima seja conveniente, como observado por Arth, ele é ineficiente em grandes conjuntos de dados, porque o
DATE()
A função SQL deve ser aplicada em cada registro, descartando assim o possível índice. Aqui estão algumas maneiras de fazer a comparação (mas leia as notas abaixo):
->where('date', '<=', '2014-07-10 23:59:59')
->where('date', '<', '2014-07-11')
// '2014-07-11'
$dayAfter = (new DateTime('2014-07-10'))->modify('+1 day')->format('Y-m-d');
->where('date', '<', $dayAfter)
Notas:
- 23:59:59 está bom (por enquanto) por causa da precisão de 1 segundo, mas dê uma olhada neste artigo:23:59:59 não é o fim do dia. Não, sério!
- Lembre-se do caso "data zero" ("0000-00-00 00:00:00"). No entanto, essas "datas zero" devem ser evitadas, pois são fonte de muitos problemas. Melhor tornar o campo anulável, se necessário.