How to use format() on a moment.js duration?

前端 未结 28 2128
自闭症患者
自闭症患者 2020-11-27 04:34

Is there any way I can use the moment.js format method on duration objects? I can\'t find it anywhere in the docs and it doesn\'t seen to be an attribute on du

相关标签:
28条回答
  • 2020-11-27 05:19

    if diff is a moment

    var diff = moment(20111031) - moment(20111010);
    var formated1 = moment(diff).format("hh:mm:ss");
    console.log("format 1: "+formated1);
    
    0 讨论(0)
  • 2020-11-27 05:20
    const duration = moment.duration(62, 'hours');
    const n = 24 * 60 * 60 * 1000;
    const days = Math.floor(duration / n);
    const str = moment.utc(duration % n).format('H [h] mm [min] ss [s]');
    console.log(`${days > 0 ? `${days} ${days == 1 ? 'day' : 'days'} ` : ''}${str}`);
    

    Prints:

    2 days 14 h 00 min 00 s

    0 讨论(0)
  • 2020-11-27 05:20

    If you use Angular >2, I made a Pipe inspired by @hai-alaluf answer.

    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 : "");
      }
    }
    
    0 讨论(0)
  • 2020-11-27 05:21

    I needed to do this for work as a requirement to display the hours in this format. At first I tried this.

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

    However anything over 24 hours and the hours reset to 0. But the minutes and seconds were accurate. So I used only that part for the minutes and seconds.

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

    Now all I need is the total hours.

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

    And to get that format that we all want we just glue it together.

    var formatted = hours + ":" + minutesSeconds
    

    if totalMilliseconds is 894600000 this will return 249:30:00.

    Hope that helped. Leave any questions in the comments. ;)

    0 讨论(0)
提交回复
热议问题