我可以在這個問題上使用一些幫助。我正在使用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