私はこの問題についていくつかの助けをすることができます。私はSymfony2 + mongodb + doctrineを使ってアプリケーションを作成しています。 Doctrine ODMを使用して、過去5分間にログインしたすべてのユーザーにクエリを実行します。私はdate_last_loginと呼ばれる日付フィールドを持つUserコレクションを持っています。Doctrine Mongodb ODMとDateTimeクエリ
だから私はそのようなquerybuilder使用しよう:私はSymfony2のプロファイラを使用して組み立てたクエリを見たとき
<?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();
を、ここで私が得たものである:
db.User.find({ "date_last_login": { "$gte": new Date("Fri, 23 Dec 2011 15:30:05 +0100") } });
それはそれ以外罰金です日付は5分ではなく10分早くなりますか?私はそれを得ていない。私のPHP DateTimeオブジェクトをダンプする場合、日付は正しい:2011-12-23 15:35:05(5分前の15:40)。
だから私は、任意の分をsubstractingせずに同じクエリを組み立てることを試みた。この時間は、すべてが正常である:私は間違っ
<?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より前です!ちなみに、このバグはDateTimeオブジェクトのサブメソッドにのみ影響するため、簡単な回避策は、そのような正しいDateTimeオブジェクトを直接作成することです:$ _dateTime = new \ DateTime( '5 minutes ago'); – JuCachalot