我可以在这个问题上使用一些帮助。我正在使用Symfony2 + mongodb + doctrine创建一个应用程序。 我只想使用Doctrine ODM来查询最近5分钟内已经登录的所有用户。我有一个名为date_last_login的日期字段的用户集合。Doctrine Mongodb ODM和DateTime查询
所以我尝试使用这样的QueryBuilder的:
<?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();
当我使用Symfony2的探查看着组装查询,这里是我的了:
db.User.find({ "date_last_login": { "$gte": new Date("Fri, 23 Dec 2011 15:30:05 +0100") } });
看来,除了罚款日期提前10分钟而不是5分钟?我只是不明白。如果我转储我的php DateTime对象,日期是正确的:2011-12-23 15:35:05(15:40前五分钟)。
于是,我就没有装配任何从其减去分钟,这段时间相同的查询,一切都很好:
<?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") } });
我在做什么错? 谢谢你的帮助!
非常感谢你,你说得对,我的PHP版本早于5.3.3!顺便说一下,因为这个bug只影响DateTime对象的子方法,所以一个简单的解决方法就是直接创建如下所示的正确的DateTime对象:$ _dateTime = new \ DateTime('5 minutes ago'); – JuCachalot 2011-12-24 08:12:48