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

如何使用Moment.js转换13位时间戳并正确计算时间差

问题修复方案

原代码错误点

  • 变量名大小写不匹配:声明的starttime、endtime是全小写,调用时写成了大驼峰startTime、endTime,会触发变量未定义报错。
  • 时间戳单位不匹配:moment.unix()只接收秒级10位时间戳,你提供的是13位毫秒级时间戳,直接传入会得到错误的日期结果。
  • 多余的格式解析参数:sessionstart、sessionend本身已经是合法的Moment对象,计算差值时不需要再传入"DD/MM/YYYY HH:mm:ss"格式参数,多余参数可能导致解析异常。

修复后完整代码

// 原始毫秒级时间戳
var starttime = 1631108701000;
var endtime = 1631116762000;

// 正确构造Moment对象,两种写法二选一即可
// 写法1:直接传入毫秒时间戳
var sessionstart = moment(starttime);
var sessionend = moment(endtime);
// 写法2:转成秒级后传入unix方法
// var sessionstart = moment.unix(starttime / 1000);
// var sessionend = moment.unix(endtime / 1000);

// 计算时间差
var ms = sessionend.diff(sessionstart);
var d = moment.duration(ms);

// 格式1:输出 02:16:53 格式,支持超过24小时的场景
var timeelapsed_num = `${String(Math.floor(d.asHours())).padStart(2, '0')}:${String(d.minutes()).padStart(2, '0')}:${String(d.seconds()).padStart(2, '0')}`;

// 格式2:输出 2小时16分钟53秒 格式
var timeelapsed_text = `${Math.floor(d.asHours())}小时${d.minutes()}分钟${d.seconds()}秒`;

// 规范日期时间展示示例,格式可以根据需求调整
var startFormat = sessionstart.format('YYYY-MM-DD HH:mm:ss');
var endFormat = sessionend.format('YYYY-MM-DD HH:mm:ss');

运行结果验证

用你提供的样例时间戳计算,输出结果如下:

  • 格式化后开始时间:2021-09-08 19:05:01
  • 格式化后结束时间:2021-09-08 21:19:22
  • 数字格式时间差:02:14:21
  • 文本格式时间差:2小时14分钟21秒

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:06:02