如何解决如何在PHP中的时间间隔中显示列表
如何在PHP中显示时间间隔中的列表
例如:在特定日期的00:00h到15:30h。我这样尝试:
我从同一天的00:00起花了15小时30分钟。想法是显示这些小时之间的列表。我错了什么?
$todayMidday = new \DateTime('now');
$todayMidday->sub(new \DateInterval('PT15H30M'));
return $this->createQueryBuilder('b')
->andWhere('b.reservationDate <= :today')
->andWhere('b.reservationDate >= :today')
->orderBy('b.hours',$order)
->setParameter('today',$todayMidday->format('Y-m-d'))
->setMaxResults($limit)
->getQuery()
->getResult();
解决方法
您的代码有很多错误。当您是新人时,我会尽力提供帮助。我不知道为什么这个问题被打了下来。到目前为止,这2条评论与您的问题并不完全相关。
这里的一个问题是\ DateTime中使用“ sub”,而且事实是您只有1个\ DateTime对象。最后,当您查询数据库时,您将完全节省时间。
“ sub”功能从日期中减去间隔。因此,您的代码在说的是:“获取当前日期和时间,然后从中减去15小时30分钟,现在选择所有小于或等于或大于今天的日期的记录(忽略时间)”
您想要的是有2个\ DateTime对象,一个是结束时间,另一个是开始时间。例如:
//get the current date time
$timeFrom = new \DateTime();
//now set the time to 00:00
$timeFrom->setTime(0,0);
//get the current date time
$timeTo = new \DateTime();
//now set the time to 00:00
$timeTo->setTime(15,30,0);
return $this->createQueryBuilder('b')
->andWhere('b.reservationDate <= :timeTo')
->andWhere('b.reservationDate >= :timeFrom')
->orderBy('b.hours',$order)
->setParameter('timeTo',$timeTo->format('Y-m-d H:i:s'))
->setParameter('timeFrom',$timeFrom->format('Y-m-d H:i:s'))
->setMaxResults($limit)
->getQuery()
->getResult();
当然,有许多种设置日期/时间的方法,但是要注意的关键是1 \ DateTime对象一次只能保存1个日期和时间。您可以按任意间隔更改该日期或时间,但只会保留该1个新时间。它没有范围。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。