在momentJs中格式化相对时间

新手上路,请多包涵

如果我使用

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

我会得到:

 a few seconds ago
a minute ago
...

是否可以像下面这样格式化输出?

 00:00 minutes ago
00:01 minutes ago
...

原文由 Smoothi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 561
2 个回答

您可以使用 updateLocale 为您的语言环境自定义时刻格式相对时间的方式。

请注意,文档说:

如果语言环境需要对令牌进行额外处理,它可以将令牌设置为具有以下签名的函数。该函数应返回一个字符串。

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

在您的情况下,您可以执行以下操作:

 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>

我不确定上面的代码是否涵盖了您需要的所有情况,但我认为它可以是一个很好的起点。

原文由 VincenzoC 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 fromNow() 方法。

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

如果传 true ,可以得到没有后缀的值。

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

有关更多信息,您可以参考 来源

原文由 Kishan Vaghela 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题