我可以解释发生了什么(我创建了moment-duration-format 插件)。
forceLength 选项仅影响具有值的第一个标记,这意味着值大于0 的第一个标记。在您的情况下,hh 令牌没有值。
https://github.com/jsmreese/moment-duration-format#force-length
从hh 切换到HH 意味着用于格式化时刻对象(日期),但不适用于使用我的插件格式化时刻对象(时间长度)(除非您自定义了持续时间格式化标记,即可以使用我的插件)。
按照建议使用moment(moment.duration(3500000)._data).format("HH:mm"); 是一个不错的创意解决方法。
如果您想获取存储库 dev 分支上的 moment-duration-format 版本,有一个选项可以提供帮助(请参阅 https://github.com/jsmreese/moment-duration-format/issues/22)...
在该版本中,您可以使用* 字符来表示修剪时要显示的最小标记,即使它没有值:
moment.duration(3510000).format("*hh:mm");
--> "00:59"
moment.duration(3509999).format("*hh:mm");
--> "00:58"
请注意,dev 分支版本中的默认行为从truncate 更改为round,因此当您从58 minutes 30 seconds 传递到58 minutes 29 seconds 时,您将从00:59 下降到00:58。在该版本中,您可以为此输出打开 trunc 选项:
moment.duration(3539999).format("*hh:mm", { trunc: true });
--> "00:58"
moment.duration(3540000).format("*hh:mm", { trunc: true });
--> "00:59"
不确定这是否是您想要的倒计时解决方案...也许最好在其余部分上设置floor (trunc)、ceiling 或 round?
如果您想要一个上限行为,您可以使用 dev 分支版本和 trunc 并将 60000 添加到您的计时器值:
moment.duration(3540000 + 60000).format("*hh:mm", { trunc: true });
--> "01:00"
moment.duration(3539999 + 60000).format("*hh:mm", { trunc: true });
--> "00:59"
moment.duration(3500000 + 60000).format("*hh:mm", { trunc: true });
--> "00:59"
moment.duration(3480000 + 60000).format("*hh:mm", { trunc: true });
--> "00:59"
moment.duration(3479999 + 60000).format("*hh:mm", { trunc: true });
--> "00:58"