我可以在这个问题上使用一些帮助。我正在使用 Symfony2 + mongodb + 教义创建一个应用程序。我只想使用 Doctrine ODM 查询最近 5 分钟内登录的所有用户。我有一个用户集合,其中包含一个名为 date_last_login 的日期字段。
所以我尝试像这样使用查询构建器:
<?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") } });
我究竟做错了什么 ?谢谢您的帮助!