You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

判断时间戳是否超出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

火山引擎 最新活动