判断时间戳是否超出30天的代码逻辑始终失效,求问题排查
问题出在「逻辑颠倒+时间戳单位不统一」两个大坑里!
嘿,这个问题我一眼就看穿啦,咱们一步步掰扯清楚:
第一个坑:时间戳单位不匹配
你写的testTimestamp是秒级时间戳(10位数字:1583744369),但new Date().getTime()返回的是毫秒级时间戳(13位数字)。直接拿秒级的数和毫秒级的数比较,相当于拿“1个苹果”和“1000个苹果”比——你的测试时间戳永远会比thirtyDaysTimestamp小,这也是为啥不管测啥时间,结果都显示「未超出30天」的核心原因!
第二个坑:判断逻辑完全写反
时间戳的数值规则是:时间越早,数值越小。
thirtyDaysTimestamp是「当前时间往前推30天」的时间戳,它的数值比当前时间小,但比更早的时间(比如你的2020年测试时间)大很多。- 你想判断
testTimestamp是否早于当前时间30天,本质是判断这个时间是不是在「30天前的时间点」更早的位置,对应的条件应该是testTimestamp < thirtyDaysTimestamp,而不是大于。 - 同时你的输出提示也搞反了:当
testTimestamp > thirtyDaysTimestamp时,说明时间在最近30天内,根本不是「超过30天」。
修正后的完整代码
// Monday, 9 March 2020 08:59:29(秒级时间戳) var testTimestamp = 1583744369; // 当前时间往前推30天的时间戳,转成秒级和testTimestamp统一单位 var thirtyDaysTimestamp = (new Date().getTime() - (30 * 24 * 60 * 60 * 1000)) / 1000; if(parseInt(testTimestamp) < parseInt(thirtyDaysTimestamp)) { console.log('Timestamp is more than 30 days old(早于当前时间30天)'); } else { console.log('Timestamp is within the last 30 days(未超出30天)'); }
现在跑这段代码,你的2020年测试时间就会正确输出「早于当前时间30天」啦!
内容的提问来源于stack exchange,提问作者fightstarr20




