Moment.js如何使用fromNow()在几小时内返回所有内容?

Vít*_*ins 4 javascript momentjs

我正在搜索moment.js文档stackoverflow,以获得使用该fromNow()函数但在几小时内返回所有内容的方法.

我的意思是:

moment([2017, 01, 05]).fromNow();     // a day ago
Run Code Online (Sandbox Code Playgroud)

应该

moment([2017, 01, 05]).fromNow();     // 24 hours ago
Run Code Online (Sandbox Code Playgroud)

我知道可以使用.diff和可能其他类似的功能,然后添加文本,但是可以使用.fromNow()这样做吗?

Vin*_*zoC 7

您可以使用relativeTimeThreshold自定义时刻相对时间的阈值.

正如文档所说:

duration.humanize具有阈值,定义何时将单位视为分钟,一小时等.例如,默认情况下,超过45秒被视为一分钟,超过22小时被视为一天,依此类推.改变这些截断值使用moment.relativeTimeThreshold(unit, limit),其中单元是下列之一s,m,h,d,M.

在您的情况下,您可以增加小时阈值以将相对天数作为小时数.这是一个工作示例,显示从1小时到26天的小时数:

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());
Run Code Online (Sandbox Code Playgroud)
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

请注意,如果需要,moment允许您使用relativeTime(这里的一个示例)和relativeTimeRounding方法进一步自定义相对时间.


Far*_*ıcı 5

如果您确实想使用fromNow(),除了覆盖 moment 的内置函数之外,我看不到任何其他方法。例如,您可以覆盖它以返回小时差异,如下所示:

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

然后您可以检查fromNow()以小时为单位返回值:

console.log(moment([2017,0,6]).fromNow());  
Run Code Online (Sandbox Code Playgroud)

返回:

19
Run Code Online (Sandbox Code Playgroud)

注意:在 19:00 尝试:)