Php Symfony在同一天的日期之间搜索
我有一个查询生成器,在我的数据库中搜索两个日期。 我不能指定搜索必须在00:00:00到23:59:59之间。 你知道吗,还是我得把它放在这儿?我所有的尝试都导致了一个错误 这是我的控制器:Php Symfony在同一天的日期之间搜索,php,symfony,date,Php,Symfony,Date,我有一个查询生成器,在我的数据库中搜索两个日期。 我不能指定搜索必须在00:00:00到23:59:59之间。 你知道吗,还是我得把它放在这儿?我所有的尝试都导致了一个错误 这是我的控制器: public function searchAction(Request $request){ //TODO最大限制 $defaultData = []; $form = $this->createFormBuilder($defaultData) ->add
public function searchAction(Request $request){
//TODO最大限制
$defaultData = [];
$form = $this->createFormBuilder($defaultData)
->add('from', DateType::class, [
'widget' => 'single_text',
'format' => 'dd-MM-yyyy',
'attr' => [
'class' => 'datepicker'
]
])
->add('to', DateType::class, [
'widget' => 'single_text',
'format' => 'dd-MM-yyyy',
'attr' => [
'class' => 'datepicker2'
]])
->add('submit', SubmitType::class)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager()->getRepository('BudgetBundle:Debit');
$from = $form['from']->getData();
var_dump($from);
$to = $form['to']->getData();
$debits = $em->getByDate($from, $to);
return $this->render('@Budget/Views/search.html.twig', ['form' => $form->createView(), 'debits' => $debits]);
}
我的回购协议:
public function getByDate($from, $to){
$qb = $this->createQueryBuilder("d");
$qb
->where('d.date BETWEEN :from AND :to')
->setParameter('from', $from->format('d-MM-yy' . '00:00:00') )
->setParameter('to', $to);
return $result = $qb->getQuery()->getResult();
}
js视图:
<script>
$( function() {
$( "#form_from" ).datepicker({
firstDay: 1,
altField: "#datepicker",
closeText: 'Fermer',
prevText: 'Précédent',
nextText: 'Suivant',
currentText: 'Aujourd\'hui',
monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
monthNamesShort: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],
dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
dayNamesShort: ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'],
dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
weekHeader: 'Sem.',
dateFormat: 'dd-mm-yy'});
$( "#form_to" ).datepicker({
firstDay: 1,
altField: "#datepicker",
closeText: 'Fermer',
prevText: 'Précédent',
nextText: 'Suivant',
currentText: 'Aujourd\'hui',
monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
monthNamesShort: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],
dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
dayNamesShort: ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'],
dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
weekHeader: 'Sem.',
dateFormat: 'dd-mm-yy'}); } );
您的函数似乎与查询参数不匹配。 尝试 另外,只需检查您的日期格式是否正确。大多数数据库以YYYY-mm-dd格式存储日期,因此正确的格式应该是->设置参数“:from',$from->格式“Y-m-d 00:00” 另外,如果你想一整天,为什么不把你的截止日期调整到第二天,然后做大于等于from,小于等于to的事情呢。 例如
首先,对于日期时间操作,我建议使用碳 回答你的问题:
如果查询不依赖于时间,那么比较两个日期就可以了。如果比较也取决于时间,则需要DateTime。在回购协议中,先格式化日期,然后附加适当的小时数。确保日期和时间之间有空格:
$qb
->where('d.date BETWEEN :from AND :to')
->setParameter('from', $from->format('Y-m-d') . ' 00:00:00')
->setParameter('to', $to->format('Y-m-d') . ' 23:59:59');
首先,对于日期时间操作,我建议使用碳。太好了!答案是空间!谢谢!谢谢你的帮助;我需要有一天和几天的结果:它的工作现在!
public function getByDate(\DateTime $from, \DateTime $to) {
$end = clone $from;
$end->modify('+1 day');
$qb = $this->createQueryBuilder("d");
$qb
->where('d.date >= :from AND d.date < :end')
->setParameter(':from', $from->format('Y-m-d 00:00:00') )
->setParameter(':end', $end->format('Y-m-d 00:00:00');
return $result = $qb->getQuery()->getResult();
}
$qb
->where('d.date BETWEEN :from AND :to')
->setParameter('from', $from->format('Y-m-d') . ' 00:00:00')
->setParameter('to', $to->format('Y-m-d') . ' 23:59:59');