How to compare datetime field from Doctrine2 with a date? How to compare datetime field from Doctrine2 with a date? symfony symfony

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.

DoctrineExtensions

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