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

