佛山市网站建设_网站建设公司_外包开发_seo优化
2025/12/27 0:05:53 网站建设 项目流程

弹窗列表-时间筛选bug

弹窗信息表,存储弹窗信息。有两个字段,存储开始时间和结束时间

1 create table notification(id int, start_tm datetime, end_tm datetime)

弹窗查询页面,有根据开始日期和结束日期筛选功能。传给后端的是日期date类型字符串如:"2025-12-01",fastapi框架自动转为date类型。展示数据库提示时间区间,查询区间有交集,展示出来。

查询筛选条件用的,取反。没有交集,然后取反,就是有交集。前端传的日期start_dt, end_dt。查询sql

select * from notification where not (start_tm >  end_dt or end_tm < start_dt) 

问题现象,提示时间开始时间、结束时间在同一天的。2025-12-01 00:000:00 ~ 2025-12-01 08:000:00 ,2025-12-02 08:000:00 ~ 2025-12-02 09:000:00。筛选条件start_dt和end_dt是同一天,只有1号可以查询到,2号查询不到。

原因分析:

date类型转datetime类型,时分秒,都会为00:00:00。导致,起止时间在同一天的,只有包含00:00:00的,才能筛选出来。

我当时想到的两个方案

解决方案:

1. 前端查时分秒给后端

2. sql做一下类型转换,datetime转成date类型

这两个方案,领导都觉得不好,同时要注意是否走了索引。

第一个方案:用户体验变差了,需要精确到时分秒

第二个方案:查询效率低,所有数据都要datetime转成date类型

领导给的方案,后端收到前端传的date后,后台代码转成datetime。转成00:00:00 ~ 23:59:59。

1. 前端不用修改,用户体验较好

2. 效率比较高

灰度发布后发现的,测试的时候要注意边界条件,提前发现问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询