是否有任何方法我可以使用moment.js格式方法持续时间对象?我在文档中找不到它,也没有看到它是持续时间对象的属性。

我希望能够做到以下几点:

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

此外,如果有其他库可以轻松地容纳这种功能,我会很有兴趣推荐。

谢谢!


当前回答

我的解决方案不涉及任何其他库,它与diff > 24小时工作

var momentInSeconds = moment.duration(n,'seconds')
console.log(("0" + Math.floor(momentInSeconds.asHours())).slice(-2) + ':' + ("0" + momentInSeconds.minutes()).slice(-2) + ':' + ("0" + momentInSeconds.seconds()).slice(-2))

其他回答

只需moment.js,不需要任何其他插件

moment().startOf('day').seconds(duration).format('HH:mm:ss')

如果diff是一瞬间

var diff = moment(20111031) - moment(20111010);
var formated1 = moment(diff).format("hh:mm:ss");
console.log("format 1: "+formated1);

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

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

将持续时间转换为ms,然后转换为moment:

moment.utc(duration.as('milliseconds')).format('HH:mm:ss')

为了以这种格式显示工作时间,我需要这样做。 一开始我是这么做的。

moment.utc(totalMilliseconds).format("HH:mm:ss")

然而,任何超过24小时的时间都将重置为0。 但是分和秒是准确的。 所以我只用这部分来表示分和秒。

var minutesSeconds = moment.utc(totalMilliseconds).format("mm:ss")

现在我只需要总时间。

var hours = moment.duration(totalMilliseconds).asHours().toFixed()

为了得到我们都想要的格式,我们只需要把它们粘在一起。

var formatted = hours + ":" + minutesSeconds

如果totalMilliseconds是894600000,这将返回249:30:00。

希望这有帮助。请在评论中留下任何问题。;)