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

如何用Moment.js以hh:mm:ss格式显示时间戳距今时长?

解决Moment.js格式化已流逝时长为hh:mm:ss的问题

问题根源

你得到负数结果是因为时间差的计算方向搞反了:then.diff(now)是用过去的时间戳减去当前时间,结果必然为负。应该反过来用当前时间减去过去时间,才能得到正的流逝时长。

修正后的实现方案

下面是调整后的代码,同时解决负数问题和时分秒的补零格式问题:

const timeDiff = (t) => {
    const now = moment();
    const then = moment(t);
    // 计算当前时间与过去时间的正差值
    const diff = now.diff(then);
    const dur = moment.duration(diff);
    
    // 补零处理,保证时分秒为两位格式
    const formatUnit = (unit) => String(unit).padStart(2, '0');
    
    // 计算累计总小时数(包含天数转换的小时,避免超过24小时后截断)
    const totalHours = dur.days() * 24 + dur.hours();
    
    return `${formatUnit(totalHours)}:${formatUnit(dur.minutes())}:${formatUnit(dur.seconds())}`;
}

代码说明

  1. 计算方向修正:now.diff(then)获取当前时间到目标时间的正差值,确保时长为正数。
  2. 补零处理:padStart(2, '0')保证单个数字的时分秒显示为两位(比如5分钟显示为05)。
  3. 总小时数计算:如果流逝时长超过24小时,dur.hours()只会返回当天的小时数(0-23),通过dur.days()*24 + dur.hours()可以得到累计的总小时数,避免截断天数。

测试验证

传入你的时间戳'2022-09-01T13:06:04.401650592Z',函数会返回类似xxx:xx:xx的正数格式结果,符合hh:mm:ss的显示需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:48:25