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

JS中如何基于两个时间戳的流逝时长提取时分秒并实现走时时钟?

JS 流逝时长转可读格式 + 自动走时时钟实现

默认你从外部获取的流逝时长为毫秒级的时间戳差值,如果拿到的是秒级结果,自行乘以1000转换即可。

1. 毫秒转天/时/分/秒的转换函数

核心逻辑是用取余和整除运算拆分各时间单位:

function formatDuration(totalMs) {
  // 各时间单位对应的毫秒数
  const ONE_SECOND = 1000;
  const ONE_MINUTE = 60 * ONE_SECOND;
  const ONE_HOUR = 60 * ONE_MINUTE;
  const ONE_DAY = 24 * ONE_HOUR;

  // 整除拿到对应单位的数量,取余拿到剩下的毫秒数
  const days = Math.floor(totalMs / ONE_DAY);
  const remainingAfterDays = totalMs % ONE_DAY;
  
  const hours = Math.floor(remainingAfterDays / ONE_HOUR);
  const remainingAfterHours = remainingAfterDays % ONE_HOUR;
  
  const minutes = Math.floor(remainingAfterHours / ONE_MINUTE);
  const remainingAfterMinutes = remainingAfterHours % ONE_MINUTE;
  
  const seconds = Math.floor(remainingAfterMinutes / ONE_SECOND);

  // 可选:给小于10的数字补前导0,展示更统一
  const padZero = (num) => num < 10 ? `0${num}` : num;
  return {
    days: days,
    hours: padZero(hours),
    minutes: padZero(minutes),
    seconds: padZero(seconds),
    // 可以自定义输出字符串格式
    formatStr: `${days}天 ${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`
  };
}

2. 自动累加走时的时钟实现

思路是基于初始流逝时长,每秒给总时长加1000毫秒,重新计算后更新页面展示即可:

<!-- 页面展示容器 -->
<div id="duration-clock"></div>

<script>
// 替换为你从外部拿到的初始流逝时长(毫秒)
let currentTotalMs = 123456789; 
const clockDom = document.getElementById('duration-clock');

// 首次渲染
updateClock();
// 每秒更新一次
const timer = setInterval(() => {
  currentTotalMs += 1000;
  updateClock();
}, 1000);

function updateClock() {
  const duration = formatDuration(currentTotalMs);
  clockDom.innerText = duration.formatStr;
}

// 前面的formatDuration函数放在这里
function formatDuration(totalMs) {
  const ONE_SECOND = 1000;
  const ONE_MINUTE = 60 * ONE_SECOND;
  const ONE_HOUR = 60 * ONE_MINUTE;
  const ONE_DAY = 24 * ONE_HOUR;

  const days = Math.floor(totalMs / ONE_DAY);
  const remainingAfterDays = totalMs % ONE_DAY;
  
  const hours = Math.floor(remainingAfterDays / ONE_HOUR);
  const remainingAfterHours = remainingAfterDays % ONE_HOUR;
  
  const minutes = Math.floor(remainingAfterHours / ONE_MINUTE);
  const remainingAfterMinutes = remainingAfterHours % ONE_MINUTE;
  
  const seconds = Math.floor(remainingAfterMinutes / ONE_SECOND);

  const padZero = (num) => num < 10 ? `0${num}` : num;
  return {
    days: days,
    hours: padZero(hours),
    minutes: padZero(minutes),
    seconds: padZero(seconds),
    formatStr: `${days}天 ${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`
  };
}

// 可选:页面销毁时清除定时器,避免内存泄漏
window.addEventListener('beforeunload', () => {
  clearInterval(timer);
});
</script>

如果需要更高精度避免定时器偏差,可以定期从原始服务重新拉取最新的流逝时长做校准即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:45:04