日期之间的教义mongodb

时间:2015-03-26 10:08:57

标签: mongodb symfony doctrine-orm doctrine-odm

这是我试图获得教条

的字段
{
    "_id" : ObjectId("5512f2ae73d151bb528b4589"),
    "name" : "Strandby-1",
    "enddate" : ISODate("2015-03-31T22:00:00.000Z"),
    "startdate" : ISODate("2015-03-24T23:00:00.000Z")
}

现在我试图在我的存储库中找到它

$time = new \DateTime();
$query = $this->createQueryBuilder();
$query
    ->field('startdate')->gte($time)
    ->field('enddate')->lte($time)
;
return $query->getQuery()->getSingleResult();

但我刚刚获得null

我总是尝试$time = new \MongoDate();,但仍然获得null

1 个答案:

答案 0 :(得分:1)

Doctrine还将DateTime,字符串时间或时间戳自身转换为MongoDate, 看看doctrine \ mongodb-odm \ lib \ Doctrine \ ODM \ MongoDB \ Types \ DateType.php

public static function getDateTime($value)
{
    $datetime = false;
    $exception = null;

    if ($value instanceof \DateTime || $value instanceof \DateTimeInterface) {
        return $value;
    ...

中调用
public function convertToDatabaseValue($value)
{
    if ($value === null || $value instanceof \MongoDate) {
        return $value;
    }

    $datetime = self::getDateTime($value);

所以问题不在日期类型中。你的问题是逻辑的。

您正在尝试使用startdate> = now> = enddate

获取对象

试试这个:

->field('startdate')->lte($time)
->field('enddate')->gte($time)