JavaScript:比较两个UNIX时间戳返回异常结果的问题求助
问题根源:时间戳单位不匹配
你遇到的这个坑其实挺常见的——核心问题就是两个时间戳的单位完全不一样!
- 你定义的
validUntil = 1629361800是秒级的UNIX时间戳(从1970年起始点开始计算的总秒数) - 而
Date.now()返回的是毫秒级的UNIX时间戳(同样从1970年起始点开始,但算的是总毫秒数,1秒=1000毫秒)
举个直观的例子:假设当前Date.now()返回1629360000000(对应秒级的1629360000),你的validUntil是1629361800,直接拿1629361800 < 1629360000000对比,结果肯定是false——毕竟秒级数值本身就比毫秒级小了三个数量级啊!
两种快速解决方法
你只需要把两个时间戳的单位统一就能解决问题,有两种可选方式:
- 将validUntil转换为毫秒级,和
Date.now()保持一致:
var validUntil = 1629361800 * 1000; // 乘以1000转成毫秒单位 if (validUntil < Date.now()) { console.log("令牌已过期"); } else { console.log("令牌仍有效"); }
- 将Date.now()转换为秒级,和validUntil保持一致:
var validUntil = 1629361800; var currentTime = Math.floor(Date.now() / 1000); // 除以1000后取整,避免小数精度问题 if (validUntil < currentTime) { console.log("令牌已过期"); } else { console.log("令牌仍有效"); }
注意第二种方法里一定要用Math.floor()取整,因为Date.now()/1000可能会得到带小数的结果,直接对比容易出现奇怪的精度问题。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

