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

Moment.js中执行时长乘除运算结果异常的修复方法

问题描述

需要对时长变量duration执行除以9后乘以10的计算,但当前newduration返回值不是正确的秒单位结果:

  • 当duration取值为299988000时,newduration仅返回311176,不符合预期。

原有问题代码:

let start = 1960
let end = 1979
let duration = moment(end.toString()).unix() - moment(start.toString()).unix();
let newduration = ((duration/9) * 10).unix();
let newvalue = moment(end.toString()).subtract(newduration, "second");

console.log(duration, newduration, newvalue);

运行依赖:

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.3/moment.min.js"></script>
错误原因

duration是两个秒级Unix时间戳相减得到的普通数值,(duration/9)*10的计算结果同样是数字类型,不是Moment实例,本身不存在.unix()方法。对普通数字调用该方法会触发JS隐式类型转换,最终输出完全错误的计算结果。

修复方案

删除newduration计算逻辑中多余的.unix()调用即可,算术计算得到的结果本身就是秒单位的合法数值,可直接传入subtract方法使用。
修复后代码:

let start = 1960
let end = 1979
let duration = moment(end.toString()).unix() - moment(start.toString()).unix();
// 移除错误的.unix()调用
let newduration = (duration / 9) * 10;
let newvalue = moment(end.toString()).subtract(newduration, "second");

console.log(duration, newduration, newvalue);
  • 结果验证:当duration为299988000时,newduration正确计算值为333320000,符合秒单位预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:45:34