Php Symfony在同一天的日期之间搜索

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

我有一个查询生成器,在我的数据库中搜索两个日期。 我不能指定搜索必须在00:00:00到23:59:59之间。 你知道吗,还是我得把它放在这儿?我所有的尝试都导致了一个错误

这是我的控制器:

 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');