库存报表Date range picker异常:结束日期未在报表中显示
排查与解决方案
首先,既然销售报表的日期选择器工作正常,说明jQuery UI Datepicker的基础初始化是没问题的,问题大概率出在库存报表独有的日期范围处理逻辑上,我给你梳理几个重点排查方向:
1. 检查日期参数的格式与后端查询逻辑
- 首先确认前端传递给后端的日期参数格式是否统一:比如是否把
2018-03-08转换成了2018-03-07 23:59:59?或者后端查询时是否用了小于等于结束日期,还是误写成了小于结束日期?- 举个典型例子:如果后端SQL是
WHERE date < '2018-03-08',那08号的数据自然不会被包含,应该改成WHERE date <= '2018-03-08 23:59:59'或者WHERE date < '2018-03-09'。
- 举个典型例子:如果后端SQL是
- 对比销售报表的后端查询代码,看两者的日期范围处理是否有差异,库存报表可能漏了对结束日期的闭区间处理。
2. 检查库存报表的前端日期范围绑定逻辑
- 确认库存报表的日期选择器是否正确绑定了开始日期和结束日期的输入框,有没有可能结束日期的参数没有被正确传递到后端?
- 可以打开浏览器开发者工具(F12),在选择日期后触发报表查询,查看Network面板里的请求参数,看
end_date是否确实是2018-03-08,有没有被意外修改。
- 可以打开浏览器开发者工具(F12),在选择日期后触发报表查询,查看Network面板里的请求参数,看
- 另外,检查库存报表的日期选择器是否有额外的配置(比如限制结束日期不能大于今天,但这里08号是历史日期,应该不影响),对比销售报表的datepicker配置,看是否有差异。
3. 检查日期的时区问题
- 虽然可能性相对小,但也要确认前端显示的日期和后端存储的日期时区是否一致。比如前端是UTC+8,后端存储的是UTC时间,那
2018-03-08在后端可能被解析成2018-03-07T16:00:00Z,导致查询时漏掉了当天的数据。- 可以查看数据库里的库存数据时间戳,确认是否和前端选择的日期在同一个时区范围内。
4. 修复示例(如果是后端SQL问题)
假设是后端SQL的闭区间问题,修改后的查询逻辑示例:
-- 错误写法(不包含结束日期当天) SELECT * FROM inventory WHERE created_at < '2018-03-08'; -- 正确写法(包含结束日期当天的所有数据) SELECT * FROM inventory WHERE created_at >= '2018-03-07' AND created_at < '2018-03-09'; -- 或者 SELECT * FROM inventory WHERE created_at BETWEEN '2018-03-07 00:00:00' AND '2018-03-08 23:59:59';
先从这几个方向排查,应该能定位到问题所在。如果还是找不到,可以把库存报表的后端查询代码或者前端请求逻辑补充出来,我再帮你细化分析。
内容的提问来源于stack exchange,提问作者Kylie Ortega
相关产品推荐
相关产品推荐

