我的持续时间为14秒。
const duration = moment.duration(end.diff(startTime));
如果我想将此持续时间显示为格式化字符串,则可以使用.humanize()
duration.humanize(true)
// in a few seconds
这很好用,但是有一种方法可以将其格式化为in 14 seconds
之类的确切持续时间,或者在更长的时间内,以in 2 days and 5 hours
而不是{ {1}}?
答案 0 :(得分:4)
您可以使用questions[question]['incorrect_1']
和humanize()
的relativeTime
键来自定义诸如relativeTimeThreshold
之类的相对时间函数的输出。
我不知道您在一般持续时间内的预期输出是什么,但是您可以使用以下代码在持续14秒的时间内获取updateLocale
:
in 14 seconds
const startTime = moment();
const end = moment().add(14, 'seconds');
const duration = moment.duration(end.diff(startTime));
console.log( duration.humanize(true) );
moment.relativeTimeThreshold('ss', 60);
moment.updateLocale('en', {
relativeTime : {
s: function (number, withoutSuffix, key, isFuture){
return number + ' seconds';
}
}
});
console.log( moment.duration(end.diff(startTime)).humanize(true) );
答案 1 :(得分:2)
不。 [Object Object]
的唯一参数是后缀切换。如果在the source中检查人性化方法使用的内部函数,则可以看到它总是对持续时间进行取整。如果需要更多的特异性,则需要使用所需的行为来实现自己的方法。
答案 2 :(得分:0)
可能的解决方案是use another library,正如OP所述。
humanizeDuration(3000) // '3 seconds'
humanizeDuration(2250) // '2.25 seconds'
humanizeDuration(97320000) // '1 day, 3 hours, 2 minutes'
答案 3 :(得分:0)
我用我编写的这段代码解决了您的问题。
function formatDuration(period) {
let parts = [];
const duration = moment.duration(period);
// return nothing when the duration is falsy or not correctly parsed (P0D)
if(!duration || duration.toISOString() === "P0D") return;
if(duration.years() >= 1) {
const years = Math.floor(duration.years());
parts.push(years+" "+(years > 1 ? "years" : "year"));
}
if(duration.months() >= 1) {
const months = Math.floor(duration.months());
parts.push(months+" "+(months > 1 ? "months" : "month"));
}
if(duration.days() >= 1) {
const days = Math.floor(duration.days());
parts.push(days+" "+(days > 1 ? "days" : "day"));
}
if(duration.hours() >= 1) {
const hours = Math.floor(duration.hours());
parts.push(hours+" "+(hours > 1 ? "hours" : "hour"));
}
if(duration.minutes() >= 1) {
const minutes = Math.floor(duration.minutes());
parts.push(minutes+" "+(minutes > 1 ? "minutes" : "minute"));
}
if(duration.seconds() >= 1) {
const seconds = Math.floor(duration.seconds());
parts.push(seconds+" "+(seconds > 1 ? "seconds" : "second"));
}
return "in "+parts.join(", ");
}
此函数采用句点字符串(ISO 8601),用Moment(> 2.3.0)对其进行解析,然后对于每个时间单位,将字符串推入parts
数组中。然后,parts
数组中的所有内容都与", "
一起连接为分隔字符串。
您可以在这里进行测试:https://jsfiddle.net/mvcha2xp/6/
我将其用作Vue过滤器以正确地使持续时间人性化。