条令在日期之间传播



这是我试图了解原理的领域

{
    "_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

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)

相关内容

  • 没有找到相关文章

最新更新