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

使用MomentJS计算旅程时长时如何正确计入暂停时间避免数值跳变

问题根因

你的逻辑存在两个核心疏漏:

  1. 未累计历史暂停总时长,仅记录了单次暂停的时间点,且恢复操作的状态没有正确处理
    当你点击恢复旅程时,必然会清空pauseTime字段,此时逻辑直接回到用原始Journey.startTime计算总时长的分支,中间暂停的所有时间会被直接算入有效时长,自然出现跳变。
  2. 暂停状态下的计算逻辑存在冗余无效代码
    moment(Journey.startTime).add(Journey.pauseTime - Journey.startTime, 'ms').toDate()的计算结果等价于Journey.pauseTime本身,这层转换没有实际意义。

修复方案

新增totalPauseDuration字段用来累计所有历史暂停的总时长,操作和计算逻辑调整如下:

  • 暂停操作触发时:仅记录当前时间到Journey.pauseTime
  • 恢复操作触发时:计算本次暂停的时长当前时间 - Journey.pauseTime,将该值累加到Journey.totalPauseDuration后清空Journey.pauseTime
  • 统一时长计算逻辑:
const totalElapsed = moment().diff(Journey.startTime);
const pauseOffset = Journey.totalPauseDuration + (Journey.pauseTime ? moment().diff(Journey.pauseTime) : 0);
const duration = moment.duration(totalElapsed - pauseOffset);

效果验证

调整后可以覆盖所有场景:

  • 暂停状态下时长会固定在暂停时刻的数值,不会继续增长
  • 恢复后时长从暂停前的数值继续累加,不会出现跳变
  • 多次暂停恢复、超长时间暂停后恢复都不会出现差值错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 22:18:03