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

如何使用MomentJS或原生JavaScript计算当前到未来固定时间的毫秒差

计算当前时间到下一个固定时间的毫秒差实现方案

以下分别提供原生JavaScript和MomentJS两种实现方式:

原生JavaScript Date对象实现

核心逻辑是先构造今日对应小时的时间对象,若该时间已过则自动顺延到次日,最终计算两个时间的时间戳差值即可。

function getDiffToNextTargetHour(targetHour) {
  const now = Date.now();
  // 构造今日目标时间:目标小时、0分、0秒、0毫秒
  const targetTime = new Date();
  targetTime.setHours(targetHour, 0, 0, 0);
  
  // 如果今日目标时间已过,就加1天变为次日目标时间
  if (targetTime.getTime() < now) {
    targetTime.setDate(targetTime.getDate() + 1);
  }
  
  // 返回毫秒差
  return targetTime.getTime() - now;
}

// 调用示例
console.log(getDiffToNextTargetHour(6)); // 到下一个上午6点的毫秒差
console.log(getDiffToNextTargetHour(12)); // 到下一个中午12点的毫秒差
console.log(getDiffToNextTargetHour(21)); // 到下一个晚上9点的毫秒差

MomentJS实现

注:MomentJS官方已停止维护,仅推荐存量使用MomentJS的项目参考以下实现:

function getMomentDiffToNextHour(targetHour) {
  const now = moment();
  // 构造今日目标时间
  const targetTime = moment().set({hour: targetHour, minute: 0, second: 0, millisecond: 0});
  
  // 目标时间已过则顺延1天
  if (targetTime.isBefore(now)) {
    targetTime.add(1, 'day');
  }
  
  // 返回毫秒差
  return targetTime.diff(now);
}

// 调用示例
console.log(getMomentDiffToNextHour(6));
console.log(getMomentDiffToNextHour(12));
console.log(getMomentDiffToNextHour(21));

边界说明

如果当前时间恰好等于目标时间,两个方法都会返回0,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:09:05