Я мог бы помочь с этой проблемой. Я создаю приложение, используя Symfony2 + mongodb + doctrine.
Я просто хочу использовать 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") } });
Что я делаю не так?
Спасибо за вашу помощь!