如何在Extbase repository中比较DateTime?

7

我尝试将一个事件的开始日期与当前日期进行比较,以便只显示下一个事件。这是我在 eventRepository 中的尝试:

public function findNext() {
    $query = $this->createQuery();
    $query->matching(
        $query->greaterThanOrEqual('datum_beginn', new \DateTime('midnight'))
    );
    return $query->execute();
}

但结果并不如预期。这是生成的查询语句:
SELECT events.* FROM events WHERE events.datum_beginn >= 1413669600 AND ...

可以看到,DateTime 被转换成了时间戳。我应该如何在查询中使用 MySQL NOW() 或者正确地使用 DateTime?

2个回答

17

使用日期的字符串值:

public function findNext() {
    $query = $this->createQuery();
    $date = new \DateTime('midnight');
    $query->matching(
        $query->greaterThanOrEqual('datum_beginn', $date->format('Y-m-d H:i:s'))
    );

    return $query->execute();
}

4
这对我没有用(Extbase 6.2)。我不得不使用 $date->getTimestamp()。 - Martin
1
@biesior:你太棒了。我从你的回答中几乎得到了所有的东西。干杯! :) - Hoja
4
实际上这取决于存储在数据库中的格式,它可以是Unix时间戳或MySQL时间戳... OP遇到问题是因为他使用了第二个格式,因此将其与Unix时间戳 ($date->getTimestamp()) 进行比较没有意义。 - biesior

2
在9 LTS中,可以直接与DateTime进行比较:
$query->greaterThanOrEqual('datum_beginn', new \DateTime)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接