印象中正儿八经修的第一个后台bug,虽然看上去只是要修改数据库某表中的时间类型,但是要考虑已有数据需要改变,同时新加入的数据也要改变,涉及了一些升级相关的流程,踩了一些坑,搞完颇有成就感,小记一下~
一个Bug引发的需求:“数据库中时间过滤使用的时间都是string类型,但是目标表存储的是date类型,导致filter请求返回数据永远为空”。
成功的方案二:
1.对于新加入的数据,需要在一开始存入的时候把时间类型转换。
因为读取的时间是时间戳,所以直接转成date类型就很简单。用.toISOString() 即可。
let dbDate = new Date(file.stamptime).toISOString();
然后在一些时间计算时,把dbDate再转回时间戳,这样原来的计算逻辑基本不需要改变。ps:大概理解为什么存date类型,因为时间戳真的计算方便,如果使用string类型,很多天数计算都好麻烦的。转成时间戳就纯数字计算了诶。
比如,我们需要跟90天的期限做计算,就可以这样做:
// if expand 90 Days, then do something
if (new Date().getTime() >
((new Date(dbDate).getTime()) - 90 * 24 * 60