将日期时间与教义之间的日期进行比较



我有一个Symfony2应用程序,其中包含一个包含日期字段的表,其类型为DateTime.
我需要获取该字段值现在所在的所有实体。

如果我使用以下代码,我会得到 0 个结果,因为 Doctrine 正在比较 DateTime 对象。

$now = new DateTime();
data = $entityRepository->findByDate($now);

我只需要比较年、月和日,而不是小时。

我怎样才能做到这一点?

我看到这个简单的方法:

$now = new DateTime();
$data = $entityRepository->getByDate($now);

然后在您的存储库中

public function getByDate(Datetime $date)
{
    $from = new DateTime($date->format("Y-m-d")." 00:00:00");
    $to   = new DateTime($date->format("Y-m-d")." 23:59:59");
    $qb = $this->createQueryBuilder("e");
    $qb
        ->andWhere('e.date BETWEEN :from AND :to')
        ->setParameter('from', $from )
        ->setParameter('to', $to)
    ;
    $result = $qb->getQuery()->getResult();
    return $result;
}

存储库中的方法

public function getDays(DateTime $firstDateTime, DateTime $lastDateTime)
{
    $qb = $this->getEntityManager()->createQueryBuilder()
        ->select('c')
        ->from('ProjectBundle:Calendar', 'c')
        ->where('c.date BETWEEN :firstDate AND :lastDate')
        ->setParameter('firstDate', $firstDateTime)
        ->setParameter('lastDate', $lastDateTime)
    ;
    $result = $qb->getQuery()->getResult();
    return $result;
}

和行动

public function calendarAction()
{
    $currentMonthDateTime = new DateTime();
    $firstDateTime = $currentMonthDateTime->modify('first day of this month');
    $currentMonthDateTime = new DateTime();
    $lastDateTime = $currentMonthDateTime->modify('last day of this month');
    $days = $this->getDoctrine()
        ->getRepository('ProjectBundle:Calendar')
        ->getDays($firstDateTime, $lastDateTime);
    return ['days' => $days];
}

教义上的datedatetime类型之间存在差异。

date:将 SQL DATETIME 映射到 PHP DateTime 对象的类型。

datetime:将 SQL DATETIME/TIMESTAMP 映射到 PHP DateTime 的类型 对象。

确保已将列类型设置为 date 而不是 datetime

或者 - 作为一种解决方法 - 您可以从原始日期1获取日期,然后使用自定义存储库方法在当天日期2 -> 00:00:00 和当天日期3 -> 23:59:59 之间进行搜索。

相关内容

  • 没有找到相关文章

最新更新