前几天运营跑来问,说有个用户投诉"我昨天的记录全没了"。我查了半天,数据明明都在库里,是查询条件把人家的记录划到了"前天"。
根子在于库里存的是UTC,但算"今天"的边界用的是服务器本地时区。UTC+8的机器,本地零点其实是UTC头天16点,于是零点刚过那阵子按本地0点去筛,就把UTC里还属于"昨天"的那批数据踢出去了。跨时区更邪乎,海外用户压根看着另一套边界。
夏令时才是真坑。切换当天本地不是24小时,23或者25。图省事写的 now - 24h 当昨日范围,碰上少一小时那天,整段直接错位一个钟头,日志怎么都对不齐。
后来一刀切:比较和边界全用UTC,时区只在展示层转。日期别手算秒数,老老实实调时间库的 date 函数。改完那行,运营再没来找过我。