我有一个用于文件上传的“剩余时间”计数器。 剩余时间是这样计算并转换成毫秒的:
我有一个用于文件上传的“剩余时间”计数器。剩余持续时间是这样计算并转换为毫秒的:
var elapsedTime = e.timeStamp - timestarted;
var speed = e.loaded / elapsedTime;
var estimatedTotalTime = e.totalSize / speed;
var timeLeftInSeconds = (estimatedTotalTime - elapsedTime) / 1000;
我接下来建立了一个数组,准备将其转换为可读的字符串。该数组如下:
var time = {
years : Math.round(moment.duration(timeLeftInSeconds, 'milliseconds').years()),
months : Math.round(moment.duration(timeLeftInSeconds, 'milliseconds').months()),
days : Math.round(moment.duration(timeLeftInSeconds, 'milliseconds').days()),
hours : Math.round(moment.duration(timeLeftInSeconds, 'milliseconds').hours()),
minutes : Math.round(moment.duration(timeLeftInSeconds, 'milliseconds').minutes()),
seconds : Math.round(moment.duration(timeLeftInSeconds, 'milliseconds').seconds())
};
这一切都完美地运行,如果我输出这些数据的字符串表示形式,如下所示:
console.log(time.years + ' years, ' + time.months + ' months, ' + time.days + ' days, ' + time.hours + ' hours, '+ time.minutes + ' minutes, ' + time.seconds + ' seconds');
它会返回一个简洁易懂的剩余时间流,像这样:
0 years, 0 months, 0 days, 0 hours, 1 minutes, 7 seconds
现在我需要的是让输出结果更加贴近人性化,使字符串根据剩余时间来构建。例如:
- 剩余2年零3个月
- 剩余1小时32分钟41秒
- 剩余7秒
- 剩余3分钟46秒
- 剩余6秒
等等……
现在我知道 moment.js 可以自动将持续时间转换为更易懂的文本,但它适用于单个值,而这里可能涉及到多个值(如小时/分钟/秒)。
我该如何使用 moment.js 或手动构建字符串来实现数据的人性化呈现?
提前致谢。
13:02:59
发布的。我最后一次编辑代码是在12:56:25
。那个家伙明显抄袭了我的答案的一半。他是在我最后一次编辑之后发布的。 - Cerbrus