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

前端 未结 28 2130
自闭症患者
自闭症患者 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:14

    You can use numeral.js to format your duration:

    numeral(your_duration.asSeconds()).format('00:00:00') // result: hh:mm:ss
    
    0 讨论(0)
  • 2020-11-27 05:15
    // 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);
    

    Have a look at the JSFiddle

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

    if you use angular add this to your filters:

    .filter('durationFormat', function () {
        return function (value) {
            var days = Math.floor(value/86400000);
            value = value%86400000;
            var hours = Math.floor(value/3600000);
            value = value%3600000;
            var minutes = Math.floor(value/60000);
            value = value%60000;
            var seconds = Math.floor(value/1000);
            return (days? days + ' days ': '') + (hours? hours + ' hours ': '') + (minutes? minutes + ' minutes ': '') + (seconds? seconds + ' seconds ': '')
        }
    })
    

    usage example

    <div> {{diff | durationFormat}} </div>
    
    0 讨论(0)
  • 2020-11-27 05:17

    I use the classic format function in these cases:

    var diff = moment(end).unix() - moment(start).unix();
    
    //use unix function instead of difference
    moment.unix(diff).format('hh:mm:ss')
    

    This is a hack because the time diff is treated as a standard moment date, an early epoch date time, but it doesn't matter to our goal and you don't need any plugin

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

    Based on ni-ko-o-kin's answer:

    meassurements = ["years", "months", "weeks", "days", "hours", "minutes", "seconds"];
    withPadding = (duration) => {
        var step = null;
        return meassurements.map((m) => duration[m]()).filter((n,i,a) => {
            var nonEmpty = Boolean(n);
            if (nonEmpty || step || i >= a.length - 2) {
                step = true;
            }
            return step;
        }).map((n) => ('0' + n).slice(-2)).join(':')
    }
    
    duration1 = moment.duration(1, 'seconds');
    duration2 = moment.duration(7200, 'seconds');
    duration3 = moment.duration(604800, 'seconds');
    
    withPadding(duration1); // 00:01
    withPadding(duration2); // 02:00:00
    withPadding(duration3); // 01:07:00:00:00
    
    0 讨论(0)
  • 2020-11-27 05:19

    We are looking into adding some kind of formatting to durations in moment.js. See https://github.com/timrwood/moment/issues/463

    A couple other libraries that might help out are http://countdownjs.org/ and https://github.com/icambron/twix.js

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