Format relative time in momentJs

后端 未结 4 2090
悲哀的现实
悲哀的现实 2020-12-09 22:08

If I use

moment().startOf(\"minute\").fromNow();

I will get:

a few seconds ago
a minute ago
...

Is it po

相关标签:
4条回答
  • 2020-12-09 23:01

    As I know, that's impossible using fromNow() function. You can do the following trick:

    moment()
        .seconds(moment().diff(moment().startOf("minute"), 'seconds'))
        .format('[00]:ss [minutes ago]');
    
    0 讨论(0)
  • 2020-12-09 23:02

    You can use fromNow() method.

    moment(<time>).fromNow()
    moment([2007, 0, 29]).fromNow(); // 4 years ago
    

    If you pass true, you can get the value without the suffix.

    moment([2007, 0, 29]).fromNow();     // 4 years ago
    moment([2007, 0, 29]).fromNow(true); // 4 years
    

    For more info you can refer source

    0 讨论(0)
  • 2020-12-09 23:02

    I use this to display relative time. Maybe somehow it would help somebody.

        const Moment = require('moment')
        const _      = require('lodash')    
    
        const duration = Moment.duration(12460923,'milliseconds')
        const durationAsDays = _.floor(duration.asDays())
        const durationAsHours = _.floor(duration.subtract( durationAsDays, 'days' ).asHours())
        const durationAsMinutes = _.floor(duration.subtract( durationAsHours, 'hours' ).asMinutes())
    
        let relativeDuration = ''
    
        if ( durationAsDays > 0  )
            relativeDuration += durationAsDays + 'd '
    
        if ( durationAsHours > 0 )
            relativeDuration += durationAsHours + 'h '
    
        if ( durationAsMinutes > 0 )
            relativeDuration += durationAsMinutes + 'm'
    
        console.log(relativeDuration, durationAsMinutes) // 3h 27m
    
    0 讨论(0)
  • 2020-12-09 23:08

    You can customize how moment formats relative time for you locale using updateLocale.

    Note that the docs says:

    If a locale requires additional processing for a token, it can set the token as a function with the following signature. The function should return a string.

    function (number, withoutSuffix, key, isFuture) {
        return string;
    }
    

    In your case, you can do something like this:

    var m1 = moment().subtract(5, 'm');
    var m2 = moment().subtract(15, 's');
    
    console.log(m1.fromNow());
    console.log(m2.fromNow());
    
    moment.updateLocale('en', {
        relativeTime : {
            future: "in %s",
            past:   "%s ago",
            s: function (number, withoutSuffix, key, isFuture){
                return '00:' + (number<10 ? '0':'') + number + ' minutes';
            },
            m:  "01:00 minutes",
            mm: function (number, withoutSuffix, key, isFuture){
                return (number<10 ? '0':'') + number + ':00' + ' minutes';
            },
            h:  "an hour",
            hh: "%d hours",
            d:  "a day",
            dd: "%d days",
            M:  "a month",
            MM: "%d months",
            y:  "a year",
            yy: "%d years"
        }
    });
    
    
    console.log(m1.fromNow());
    console.log(m2.fromNow());
    <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

    I'm not sure that the code above covers all the case you need, but I think that it can be a good starting point.

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