How to compare datetime field from Doctrine2 with a date?
one idea is to extract from the date: the year, month and day. And then
$qb->select('p') ->where('YEAR(p.postDate) = :year') ->andWhere('MONTH(p.postDate) = :month') ->andWhere('DAY(p.postDate) = :day');$qb->setParameter('year', $year) ->setParameter('month', $month) ->setParameter('day', $day);
MONTH DAY, and YEAR you take out the DoctrineExtensions from
e.g.
This works for me. You only need the files: day.php, month.php and year.php.....
You get the month e.g.:
$datetime = new \DateTime("now"); $month = $datetime->format('m'); echo $month;
Copy day.php, month.php and year.php to your bundle Xy\TestBundle\DqlRegister the new functions in app\config.yml with
doctrine:orm: auto_generate_proxy_classes: %kernel.debug% entity_managers: default: auto_mapping: true dql: datetime_functions: month: Xy\TestBundle\Dql\Month year: Xy\TestBundle\Dql\Year day: Xy\TestBundle\Dql\Day
There is better option than adding the doctrine extension for date.
First you need to get start-datetime and end-datetime :
$today_startdatetime = \DateTime::createFromFormat( "Y-m-d H:i:s", date("Y-m-d 00:00:00") );$today_enddatetime = \DateTime::createFromFormat( "Y-m-d H:i:s", date("Y-m-d 23:59:59") );
Now use them in query :
$em = \Zend_Registry::get('em');$qb_1 = $em->createQueryBuilder();$q_1 = $qb_1->select('wsh') ->from('\Entities\wishes', 'wsh') ->where('wsh.created_at >= :today_startdatetime') ->andWhere('wsh.created_at <= :today_enddatetime');$q_1->setParameter('today_startdatetime', $today_startdatetime);$q_1->setParameter('today_enddatetime', $today_enddatetime);$result= $q_1->getQuery ()->getResult ();
It is also possible to use built-in function DATE_DIFF(date1, date2)
which returns difference in days. Check docs
$result = $this->createQueryBuilder('l') ->where('DATE_DIFF(l.startDate, CURRENT_DATE()) = 0')