You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:比较两个UNIX时间戳返回异常结果的问题求助

问题根源:时间戳单位不匹配

你遇到的这个坑其实挺常见的——核心问题就是两个时间戳的单位完全不一样!

  • 你定义的validUntil = 1629361800是秒级的UNIX时间戳(从1970年起始点开始计算的总秒数)
  • 而Date.now()返回的是毫秒级的UNIX时间戳(同样从1970年起始点开始,但算的是总毫秒数,1秒=1000毫秒)

举个直观的例子:假设当前Date.now()返回1629360000000(对应秒级的1629360000),你的validUntil是1629361800,直接拿1629361800 < 1629360000000对比,结果肯定是false——毕竟秒级数值本身就比毫秒级小了三个数量级啊!

两种快速解决方法

你只需要把两个时间戳的单位统一就能解决问题,有两种可选方式:

  1. 将validUntil转换为毫秒级,和Date.now()保持一致:
var validUntil = 1629361800 * 1000; // 乘以1000转成毫秒单位
if (validUntil < Date.now()) {
  console.log("令牌已过期");
} else {
  console.log("令牌仍有效");
}
  1. 将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 06:54:05