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

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

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

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

谢谢!


当前回答

如果你使用Angular >2,我做了一个受@hai-alaluf answer启发的Pipe。

import {Pipe, PipeTransform} from "@angular/core";

@Pipe({
  name: "duration",
})

export class DurationPipe implements PipeTransform {

  public transform(value: any, args?: any): any {

    // secs to ms
    value = value * 1000;
    const days = Math.floor(value / 86400000);
    value = value % 86400000;
    const hours = Math.floor(value / 3600000);
    value = value % 3600000;
    const minutes = Math.floor(value / 60000);
    value = value % 60000;
    const seconds = Math.floor(value / 1000);
    return (days ? days + " days " : "") +
      (hours ? hours + " hours " : "") +
      (minutes ? minutes + " minutes " : "") +
      (seconds ? seconds + " seconds " : "") +
      (!days && !hours && !minutes && !seconds ? 0 : "");
  }
}

其他回答

如果diff是一瞬间

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

如果你愿意使用不同的javascript库,numeric .js可以将秒格式化如下(例如1000秒):

var string = numeral(1000).format('00:00');
// '00:16:40'

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

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。

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

在这些情况下,我使用经典的format函数:

var diff = moment(end).unix() - moment(start).unix();

//use unix function instead of difference
moment.unix(diff).format('hh:mm:ss')

这是一个hack,因为时间差异被视为一个标准的时刻日期,一个早期的epoch日期时间,但这对我们的目标并不重要,你不需要任何插件

将时刻持续时间格式化为字符串

var duration = moment.duration(86400000); //value in milliseconds
var hours = duration.hours();
var minutes = duration.minutes();
var seconds = duration.seconds();
var milliseconds = duration.milliseconds();

var date = moment().hours(hours).minutes(minutes).seconds(seconds).millisecond(milliseconds);
if (is12hr){
    return date.format("hh:mm:ss a");
}else{
    return date.format("HH:mm:ss");
}