gpt4 book ai didi

date - Doctrine2 - 如何在此查询中包含月份的最后一天

转载 作者:行者123 更新时间:2023-12-02 01:50:58 24 4
gpt4 key购买 nike

有人可以指出这个查询中缺少什么吗?不显示该月的最后一天。

曾尝试使用 (->where('b.created >= :start'), ->andWhere('b.created <= :end') 而不是 BETWEEN,但这没有用。

public function getPostsByMonth($year, $month)
{
$date = new \DateTime("{$year}-{$month}-01");

$qb = $this->createQueryBuilder('b');
$query = $qb
->where('b.created BETWEEN :start AND :end')
->setParameter('start', $date->format('Y-m-d'))
->setParameter('end', $date->modify('last day of this month')->format('Y-m-d'))
;
return $query->getQuery()->getResult();
}

变化

    $date = new \DateTime("{$year}-{$month}-01");
$toDate = clone $date;
$toDate->modify("last day of this month");

$qb = $this->createQueryBuilder('b')
->where('b.created BETWEEN :start AND :end')
->setParameter('start', $date)
->setParameter('end', $toDate);

最佳答案

您是否看过在数据库上执行的实际查询?

看来你们使用的是同一个DateTime;当你执行 $date->modify() 时,它不会返回一个新对象,而是会更改它的内部数据,但它仍然是同一个实例。

此外,当您要求 DateTime 对象转到 本月的最后一天 时,您最终得到的是 YYYY-01-31 00:00:00实际上是月底前一天。更改您的时间字符串,使其转到下个月的第一天午夜,这正是您想要的位置:YYYY-02-01 00:00:00:

$toDate = clone $date;
$toDate->modify("first day of next month midnight");

此外,你不需要格式化它,你可以直接传递 DateTime 对象,让 Doctrine 做底层的艰苦工作:

$query = $qb
->where('b.created BETWEEN :start AND :end')
->setParameter('start', $date)
->setParameter('end', $toDate)
;

关于date - Doctrine2 - 如何在此查询中包含月份的最后一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22771462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com