Compare dates between datetimes with Doctrine Compare dates between datetimes with Doctrine symfony symfony

Compare dates between datetimes with Doctrine


I see this simple way:

$now = new \DateTime();$data = $entityRepository->getByDate($now);

then in your repository

public function getByDate(\Datetime $date){    $from = new \DateTime($date->format("Y-m-d")." 00:00:00");    $to   = new \DateTime($date->format("Y-m-d")." 23:59:59");    $qb = $this->createQueryBuilder("e");    $qb        ->andWhere('e.date BETWEEN :from AND :to')        ->setParameter('from', $from )        ->setParameter('to', $to)    ;    $result = $qb->getQuery()->getResult();    return $result;}


Method in repository

public function getDays(\DateTime $firstDateTime, \DateTime $lastDateTime){    $qb = $this->getEntityManager()->createQueryBuilder()        ->select('c')        ->from('ProjectBundle:Calendar', 'c')        ->where('c.date BETWEEN :firstDate AND :lastDate')        ->setParameter('firstDate', $firstDateTime)        ->setParameter('lastDate', $lastDateTime)    ;    $result = $qb->getQuery()->getResult();    return $result;}

And action

public function calendarAction(){    $currentMonthDateTime = new \DateTime();    $firstDateTime = $currentMonthDateTime->modify('first day of this month');    $currentMonthDateTime = new \DateTime();    $lastDateTime = $currentMonthDateTime->modify('last day of this month');    $days = $this->getDoctrine()        ->getRepository('ProjectBundle:Calendar')        ->getDays($firstDateTime, $lastDateTime);    return ['days' => $days];}


There is a difference between the date and datetime types in doctrine.

date: Type that maps a SQL DATETIME to a PHP DateTime object.

datetime: Type that maps a SQL DATETIME/TIMESTAMP to a PHP DateTime object.

Make sure you have set the column type to date instead of datetime.

Alternatively - as a workaround - you could get the day from the original date1 and then search between a same-day date2 -> 00:00:00 and same-day date3 -> 23:59:59 using a custom repository method.