日期区间的终点是用第二天的 00:00:00 还是当天的 23:59:59 比较好?

124 天前
 xubingok

跟后端对接口,发现关于日期区间的定义有点模糊.

比如查询昨天的数据,我们一般是传起始时间点. 对接后端 A 的参数是:

{
    startTime:2024-01-04 00:00:00,
    endTime:2024-01-04 23:59:59
}

对接后端 B 的参数是:

{
    startTime:2024-01-04 00:00:00,
    endTime:2024-01-05 00:00:00
}

后端 A 说他用的是小于等于,后端 B 说他用的是小于,前端的时间工具类还得写两个方法...

想统一,但感觉两种方式都有自己的道理. 个人是倾向于 00:00:00 这种,可能是来源于数组截取时顾头不顾尾的概念. 另一位后端大佬则觉得 23:59:59 更便于理解.

不知道大家都是用哪种呢?

12986 次点击
所在节点    程序员
132 条回复
luomao
124 天前
用 23:59:59 ,00:00:00 已经是第二天了
justlazydog
124 天前
都可以,统一就行,常识上一般是 23:59:59 。
corcre
124 天前
用 23:59:59, 因为永远不知道谁没事传个日期/加个字段只记日期, 用 datetime 类型还把时间给截了...
coderzhangsan
124 天前
让后端统一口径,前端没有必要兼容 2 种方案。
tusj
124 天前
前闭后开区间,用 00:00:00
belin520
124 天前
moment 等时间库的 endOfDay 是 23:59:59
lscho
124 天前
肯定是 23:59:59 ,0 点已经是第二天了
douxc
124 天前
不懂就问:如果记录到了毫秒级,23:59:59 会少 1 秒的数据吗?
Curtion
124 天前
A 更好, 左闭右开并不是一个常识, 大众常识应该左闭右闭, 选 00:00:00 会误以为包括第二天开始, 我们系统很多客户已经反馈过了
maocat
124 天前
左开右闭原则 00.00.00 ,如果用 23.59.59 后面还有毫秒呢
gdfsjunjun
124 天前
当然是 23:59:59 容易理解,0 点的话会被认为第二天也算
chronos
124 天前
除非你数据库里面存的时间精度只到秒,否则还是用 00:00:00 的好。
lqhunter233
124 天前
@douxc 2024-01-04 23:59:59.999(yyyy-MM-dd HH:mm:ss.SSS)精确到秒可以这样
leonshaw
124 天前
左闭右开
lqhunter233
124 天前
打错了,毫秒
caiqichang
124 天前
前端只穿日期
{
startTime:2024-01-04,
endTime:2024-01-04
}
后端想怎么处理自己在 get 里面处理
zliea
124 天前
左闭右开 +1
yinmin
124 天前
如果某条记录的时间是 23:59:59.20 呢?

应该用 00:00:00 ,运算逻辑是:>=startTime and <endTime

(即使数据库字段的时间秒不含小数,也不应该用 23:59:59 ,避免给自己留坑。谁也不知道几年之后,某个程序员写库的时候引入了秒的小数)
darkengine
124 天前
如果只是日期区间,我的建议是只传日期,不传时间。以后如果有改动,直接改后端的逻辑就行,前端都不用再发版。
likunyan
124 天前
用 23:59:59 ,00:00:00 已经是第二天了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1006014

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX