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

使用quick.db实现24小时计时器时时间返回负数问题求助

24小时计时器返回负数问题解决方案

你代码中的时间差计算逻辑完全错误,是导致时间返回负数的根本原因。

问题拆解

日常24小时冷却计时器的核心逻辑是判断「当前时间」与「上次执行功能的时间」的差值是否超过24小时:

  • 差值 >= 24小时:冷却结束,可执行功能,更新存储的时间为当前时间
  • 差值 < 24小时:冷却中,剩余时间 = 24小时毫秒数 - 差值

你现有代码中的计算式timeout - (Date.now() * -2 - timer)展开后为timeout + 2*Date.now() + timer,完全不符合正常的时间差计算逻辑,你添加*-2只是碰巧凑出了表面上正常的数值,本质逻辑是错误的。

你移除*-2后得到负数,是因为此时计算式等价于(timer + timeout) - Date.now(),结果为负说明timer + timeout小于当前时间戳,即已经超过了24小时冷却期,本就不应该走冷却提示分支。

正确实现代码

const db = require('quick.db');
const ms = require('parse-ms');

const DAILY_TIMEOUT = 86400000; // 24小时对应的毫秒数
let lastUseTime = await db.fetch(`daily_timer`);

if (lastUseTime !== null && Date.now() - lastUseTime < DAILY_TIMEOUT) {
  // 仍在冷却期,计算剩余时间
  let remainingTime = ms(DAILY_TIMEOUT - (Date.now() - lastUseTime));
  console.log(remainingTime);
  // 此处添加冷却提示逻辑
} else {
  // 冷却结束,执行对应功能
  // 功能执行完成后更新数据库存储的时间为当前时间
  await db.set(`daily_timer`, Date.now());
  // 此处添加功能执行成功的逻辑
}

额外排查点

如果替换为正确逻辑后仍存在异常,先检查数据库中存储的daily_timer值是否为合法的13位Unix时间戳,确认存储时间戳的逻辑没有写错值类型、或误存为负数等异常值。

内容的提问来源于stack exchange,提问作者MrLlamaDev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:45:05