如何在 moment.js 持续时间内使用 format()?

IT技术 javascript momentjs
2021-01-30 09:43:35

有什么办法可以在持续时间对象上使用moment.js format方法吗?我在文档中的任何地方都找不到它,而且它也不是持续时间对象的属性。

我希望能够执行以下操作:

var diff = moment(end).unix() - moment(start).unix();
moment.duration(diff).format('hh:mm:ss')

此外,如果有任何其他库可以轻松适应此类功能,我会对推荐感兴趣。

谢谢!

6个回答
// set up
let start = moment("2018-05-16 12:00:00"); // some random moment in time (in ms)
let end = moment("2018-05-16 12:22:00"); // some random moment after start (in ms)
let diff = end.diff(start);

// execution
let f = moment.utc(diff).format("HH:mm:ss.SSS");
alert(f);

看看 JSFiddle

将 10 千万亿毫秒显示为 mm:ss 没有任何意义
2021-03-16 09:43:35
@Phil 如果您想显示天数,可以使用“D”或“DD”。
2021-03-16 09:43:35
没有简单的方法。我做了这个 jsfiddle.net/fhdd8/14,这可能就是你所做的,但我认为 moment 没有任何开箱即用的东西
2021-03-29 09:43:35
好办法。虽然如果我也想显示天数它不起作用:(一年DDD HH:mm:ss.SSSDDD的哪一天)1在我想要的时候显示0有什么快速解决办法吗?
2021-04-08 09:43:35
这在 24 小时后不起作用(即,如果我想显示 117 小时)。否则很好的解决方案!
2021-04-12 09:43:35

将持续时间转换为毫秒,然后转换为时刻:

moment.utc(duration.as('milliseconds')).format('HH:mm:ss')
因此,如果您的持续时间超过 24 小时,这将不起作用.. 24 小时正在重置为 0 小时
2021-04-06 09:43:35
@ S.Robijns一个有用的观察,但只是强调为他人-这预期的行为.format('HH:mm:ss')查看文档
2021-04-10 09:43:35

我们正在考虑在 moment.js 中为持续时间添加某种格式。https://github.com/timrwood/moment/issues/463

其他几个可能有帮助的库是http://countdownjs.org/https://github.com/icambron/twix.js

为什么它不能与库中其他地方使用的其他 .format 相同?这是精神错乱。5年了还没完成?真的?!
2021-03-19 09:43:35
我也期待持续时间格式。现在看看 countdownjs,但 twix 似乎只做“智能”格式化,没有太多定制。
2021-03-27 09:43:35
我投了反对票,因为这个答案中链接的 github 问题只是一个永无止境的流意见、愿望和咆哮,无处可去,该问题在 4 年后仍然开放,没有任何用处
2021-04-02 09:43:35
Countdown.js 非常棒,作者超级有帮助(因为我的一些建议,在同一天发布了2个版本)!
2021-04-04 09:43:35
虽然 twix 努力进行智能格式化,但它有很多格式化选项,包括所涉及的标记:github.com/icambron/twix.js/wiki/Formatting免责声明:我是 twix 的作者。
2021-04-11 09:43:35

使用此插件Moment Duration Format

例子:

moment.duration(123, "minutes").format("h:mm");
如果您的持续时间超过一天,@EvgenyBobkin 将无法工作,但图书馆会处理它
2021-03-19 09:43:35
该格式无法正常工作,持续时间方面很好,但是如果我指定hh:mm:mm并且只有 10 秒它会显示10而不是00:00:10(即使打开 forcelength)如果它没有格式化......那么它应该被称为其他东西,格式应该是标准化。
2021-03-29 09:43:35
@ppumkin 我知道这是旧的,但如果你指定{ trim: false }它会停止这种行为。
2021-03-30 09:43:35
这是我更喜欢使用的:假设您有持续时间,就像const duration = moment.duration(value, 'seconds');我可以使用以下格式进行格式化: moment.utc(duration.as('milliseconds')).format('HH:mm:ss').toString();
2021-04-13 09:43:35

使用这行代码:

moment.utc(moment.duration(4500, "seconds").asMilliseconds()).format("HH:mm:ss")
如果持续时间 > 86400''(即 24 小时),这将不起作用。
2021-04-01 09:43:35
所以当我使用 .utc 时,时间是 waaaaayyyy。为什么?
2021-04-08 09:43:35
在excel中也是一样,会24小时滚动一次。如果您知道 24 小时限制,这是一个很好的解决方法。
2021-04-13 09:43:35