我怎样才能在人性化这moment.js整个持续时间/ JavaScript的(How can I h

2019-07-17 20:32发布

我有柜台在地方上传文件的一个“剩余时间”。 剩余持续时间被计算并转化为毫秒,像这样:

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有abiility自动人性化的持续时间,其单值工作正常,但这个可以有多个可能的值(小时/分/秒等)

我怎么能去要么moment.js或手动构建字符串人性化这个数据?

提前致谢。

Answer 1:

我认为最好的方法是这样的:

function humanize(time){
    if(time.years   > 0){   return time.years   + ' years and '     + time.months   + ' months remaining';}
    if(time.months  > 0){   return time.months  + ' months and '    + time.days     + ' days remaining';}
    if(time.days    > 0){   return time.days    + ' days and '      + time.hours    + ' hours remaining';}
    if(time.hours   > 0){   return time.hours   + ' hours and '     + time.minutes  + ' minutes and ' + time.seconds + ' seconds remaining';}
    if(time.minutes > 0){   return time.minutes + ' minutes and '   + time.seconds  + ' seconds remaining';}
    if(time.seconds > 0){   return time.seconds + ' seconds remaining';}
    return "Time's up!";
}

或者,您可以使用此功能:

function humanize(time){
    var o = '';
    for(key in time){
        if(time[key] > 0){
            if(o === ''){
                o += time[key] + ' ' + key + ' ';
            }else{
                return o + 'and ' + time[key] + ' ' + key + ' remaining';
            }
        }
    }
    return o + 'remaining';
}

它返回"x <time> and y <time> remaining" ,对于2个最大值。 在后一种情况下(或者只有几秒钟。



Answer 2:

我HumanizeDuration.js库听起来像你想要什么:

humanizeDuration(1);         // "1 millisecond"
humanizeDuration(3000);      // "3 seconds"
humanizeDuration(2012);      // "2 seconds, 12 milliseconds"
humanizeDuration(97320000);  // "1 day, 3 hours, 2 minutes"

看起来像我的回答有点晚了,但也许它会帮助其他人在看这个问题!



Answer 3:

你应该给这个插件一试: 时刻持续时间格式

它的语法是非常方便的:

var moment = require('moment');
require("moment-duration-format");
moment.duration(32832, "seconds").format("h [hrs]: m [min]: s [sec]")
// => 9 hrs: 7 min: 12 sec" 


文章来源: How can I humanize this complete duration in moment.js / javascript