Получите разницу во времени с учением - PullRequest
0 голосов
/ 17 декабря 2018

Привет. Я пытаюсь указать количество дней и получить записи между этим днем ​​и сейчас.

            $now = new \DateTime();
            $days = 14;
            $to = $now->sub(new \DateInterval('P'.$days.'D'));
            $qb = $this->createQueryBuilder('c')
            $qb->andWhere('c.createdDate BETWEEN :from AND :to')
                    ->setParameter('from', $now)
                    ->setParameter('to', $to);
            $qb->getQuery()->getResult();

в моем столбце db create_date и запись, содержащая 2018-12-12.Но, к сожалению, запрос не возвращает значения :(. Было бы здорово помочь, если кто-то может решить. И я использую sub, чтобы получить минус дату.

1 Ответ

0 голосов
/ 17 декабря 2018

Допустимый запрос:

$from = new \DateTime('-14 days');
$to = (new \DateTime())->setTime(23, 59, 59);

$qb = $this->createQueryBuilder('c')
$qb->andWhere('c.createdDate BETWEEN :from AND :to')
    ->setParameter('from', $from)
    ->setParameter('to', $to);

$result = $qb->getQuery()->getResult();

Причина, по которой он не работает для вас, заключается в том, что \DateTime является изменяемым типом.Изменяя копию, вы также изменили предыдущий объект даты:

$from = new \DateTime();

// below you mutate the $from object, then return its instance
$to = $from->sub(new \DateInterval('P10D'));
// effect is both $from and $to reference the same object in memory

var_dump(spl_object_hash($from) === spl_object_hash($to));
echo $from->format('Y-m-d') , '<br>';
echo $to->format('Y-m-d');

В результате:

bool(true) 
2018-12-07
2018-12-07

Вы сопоставили свойство createdDate как datetime в Doctrine.Лично я всегда использую тип datetime_immutable.Вместо DateTime я работаю с DateTimeImmutable , который по сравнению с DateTime является неизменяемым, поэтому мне не нужно беспокоиться о каких-либо ссылках:

$from = new \DateTimeImmutable();
$to = $from->sub(new \DateInterval('P10D'));

var_dump(spl_object_hash($from) === spl_object_hash($to));
echo $from->format('Y-m-d') , '<br>';
echo $to->format('Y-m-d');

Результат:1019 *

bool(false)
2018-12-17
2018-12-07
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...