Moment.js how to use fromNow() to return everything in hours?

前端 未结 2 1650
误落风尘
误落风尘 2020-12-03 19:30

I\'ve searching the moment.js docs and stackoverflow for a way to use the fromNow() function but returning everything in hours.

What I mean is:

相关标签:
2条回答
  • 2020-12-03 19:44

    You can use relativeTimeThreshold to customize thresholds for moment relative time.

    As the docs says:

    duration.humanize has thresholds which define when a unit is considered a minute, an hour and so on. For example, by default more than 45 seconds is considered a minute, more than 22 hours is considered a day and so on. To change those cutoffs use moment.relativeTimeThreshold(unit, limit) where unit is one of s, m, h, d, M.

    In your case, you can increase hour thresholds to get relative days as hours. Here a working example showing time as hours from 1 hour to 26 days:

    var m1 = moment().subtract(5, 'h');
    var m2 = moment().subtract(55, 'h');
    var m3 = moment().subtract(1, 'd');
    
    // Default results
    console.log(m1.fromNow());
    console.log(m2.fromNow());
    console.log(m3.fromNow());
    
    // Change relativeTimeThreshold
    moment.relativeTimeThreshold('m', 60);
    moment.relativeTimeThreshold('h', 24*26);
    
    // Results in hours
    console.log(m1.fromNow());
    console.log(m2.fromNow());
    console.log(m3.fromNow());
    <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

    Note that, if you need, moment lets you customize relative time further with relativeTime (here one of my examples) and relativeTimeRounding method.

    0 讨论(0)
  • 2020-12-03 19:48

    If you definitely want to use fromNow(), I don't see any way other than overriding moment's built-in function. For example, you can override it to return the difference in hours as follows:

    moment.fn.fromNow = function (a) {
        var duration = moment().diff(this, 'hours');
        return duration;
    }
    

    Then you can check that fromNow() returns the value in hours:

    console.log(moment([2017,0,6]).fromNow());  
    

    which returns:

    19
    

    Note: Tried at 19:00 :)

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