【问题标题】:Difference Between two times as percentage in javascriptjavascript中两倍百分比的差异
【发布时间】:2014-09-18 18:57:06
【问题描述】:

例子说:

var timeone = "01:23:00"; // time elapsed
var timetwo = "07:34:00"; // total time 

那么我如何计算总时间和经过时间之间的差异并取出它的百分比?

更新

试过了,但在控制台中我看到“NaN”

var TimeLeft =  Date.parse(TimeLft.text())/100;
            console.log(TimeLeft);
            var Totaltime = Date.parse(DealTotalTm)/100;
            console.log(Totaltime);
            var percentChange = (TimeLeft/Totaltime)*100;

            console.log(percentChange);

【问题讨论】:

  • 你做了哪些努力?
  • @pr1nc3 另外两个输出什么?

标签: javascript jquery date datetime


【解决方案1】:

由于您使用的是已用时间而不是一天中的时间,因此我建议避免使用Date 对象。它的目的不同。

如果您可以保证输入采用您指定的 hour:minute:second 格式,则只需拆分各个部分以将总秒数计算为单个整数。然后您可以将它们除以获取百分比,如下所示:

function totalSeconds(time){
    var parts = time.split(':');
    return parts[0] * 3600 + parts[1] * 60 + parts[2];
}

var timeone = "01:23:00"; // time elapsed
var timetwo = "07:34:00"; // total time 
var pct = (100 * totalSeconds(timeone) / totalSeconds(timetwo)).toFixed(2);

我已将结果固定到小数点后两位,但您可以根据需要进行调整。

jsFiddle here.

【讨论】:

    【解决方案2】:

    "01:23:00" 仅包含时间部分,不是可以使用Date.parse() 解析的有效格式

    要使其正确解析,请在解析前添加一个虚拟日期部分。

    例如:Date.parse("01-01-2000 " + TimeLft.text())

    由于您希望获得一个百分比值,因此您需要从结果中减去为日期部分 (01-01-2000) 添加的秒数:

    var dayOffset = Date.parse("01-01-2000 00:00:00");
    var left =  Date.parse("01-01-2000 " + TimeLft.text()) - dayOffset;
    var total =  Date.parse("01-01-2000 " + DealTotalTm) - dayOffset;
    var percentChange = (TimeLeft/Totaltime)*100;
    

    【讨论】:

      【解决方案3】:

      并非所有浏览器(IE lt 9)都正确支持Date.parse() 的第一个,因此我建议您使用日期对象.set*() 函数。其次,由于您的时间没有任何日期,因此您需要根据一天的开始来确定它们。这应该可以工作并且是浏览器安全的http://jsfiddle.net/6q3WB/

      var baseDate = new Date();
          timeElapsed = "01:23:00", // time elapsed
          timeElapsedParts = timeElapsed.split(':'),
          timeElapsedDate = new Date(),
          timeElapsedInMilliseconds = 0,
          timeTotal = "07:34:00", // total time
          timeTotalParts = timeTotal.split(':'),
          timeTotalDate = new Date(),
          timeTotalInMilliseconds = 0,
          timeDifferenceInPercentage = 0;
      
      baseDate.setHours(0);
      baseDate.setMinutes(0);
      baseDate.setSeconds(0);
      baseDate.setMilliseconds(0);
      
      timeElapsedDate.setHours(timeElapsedParts[0]);
      timeElapsedDate.setMinutes(timeElapsedParts[1]);
      timeElapsedDate.setSeconds(timeElapsedParts[2]);
      timeElapsedDate.setMilliseconds(0);
      
      timeTotalDate.setHours(timeTotalParts[0]);
      timeTotalDate.setMinutes(timeTotalParts[1]);
      timeTotalDate.setSeconds(timeTotalParts[2]);
      timeTotalDate.setMilliseconds(0);
      
      timeElapsedInMilliseconds = (timeElapsedDate.getTime() - baseDate.getTime());
      timeTotalInMilliseconds = (timeTotalDate.getTime() - baseDate.getTime());
      
      timeDifferenceInPercentage = (Math.round(((timeTotalInMilliseconds - timeElapsedInMilliseconds) / timeTotalInMilliseconds) * 10000) / 100);
      
      console.log(timeDifferenceInPercentage + '%');
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多