如何使用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
相关产品推荐
相关产品推荐

