How to query by datetime in Doctrine MongoDB ODM?

Doctrine Mongodb ODM and DateTime query

  • I could use some help on this problem. I'm creating an application using Symfony2 + mongodb + doctrine. I just want to use Doctrine ODM to query all the users who have been logged in the last 5 minutes. I have a User collection with a date field called date_last_login. So I try to use the querybuilder like that: <?php // Creating a DateTime object and susbtract 5 min from now // local time is 15:40:05, timezone: 'Europe/Paris' $_dateTime = new \DateTime(); $_interval5Min = new \DateInterval('PT5M'); $_dateTime->sub($_interval5Min); $query = $this->createQueryBuilder('User') ->field('date_last_login')->gte($_dateTime) ->getQuery(); ->execute(); When I looked at the assembled query using symfony2 profiler, here is what I got: db.User.find({ "date_last_login": { "$gte": new Date("Fri, 23 Dec 2011 15:30:05 +0100") } }); It seems fine except that the date is 10 minutes earlier rather than 5 minutes? I just don't get it. If I dump my php DateTime object, date is correct: 2011-12-23 15:35:05 (five minutes before 15:40). So I tried to assemble the same query without substracting any minutes and this time, everything is fine: <?php // local time is 15:50:00 $query = $this->createQueryBuilder('User') ->field('date_last_login')->gte(new \DateTime()) ->getQuery(); ->execute(); // query is ok: db.User.find({ "date_last_login": { "$gte": new Date("Fri, 23 Dec 2011 15:50:00 +0100") } }); What am I doing wrong ? Thank you for your help!

  • Answer:

    This is likely due to this PHP bug which was fixed in 5.3.3: https://bugs.php.net/bug.php?id=50916

JuCachalot at Stack Overflow Visit the source

Was this solution helpful to you?

Related Q & A:

Just Added Q & A:

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.