How to compare DateTime in Extbase repository
Asked Answered
P

2

7

I try to compare the start date of an event with the current date in order to only display the next events. This is my try in the eventRepository:

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

But the result is not as expected. This is the resulting query:

SELECT events.* FROM events WHERE events.datum_beginn >= 1413669600 AND ...

As you can see the DateTime is converted to a timestamp. How can I either use MySQL NOW() in the query OR use DateTime properly?

Pianissimo answered 19/10, 2014 at 14:7 Comment(0)
L
18

Use string value of the date:

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();
}
Langouste answered 19/10, 2014 at 15:48 Comment(3)
This did not work for me (Extbase 6.2). I had to use $date->getTimestamp() instead.Duologue
@biesior: You're awesome. I got almost everything from your answers. Cheers! :)Drennen
Actually that depends on that in which format is stored in DB it may be unix timestamp or MySQL timestamp... OP had problems, cause he uses second format so comparing it with unix timestamp ($date->getTimestamp()) doesn't make senseLangouste
H
2

In 9 LTS it is possible to compare against DateTime directly:

$query->greaterThanOrEqual('datum_beginn', new \DateTime)
Honeyman answered 6/3, 2020 at 15:0 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.