计算%javascript中已经过了多少时间

时间:2016-02-01 17:04:42

标签: javascript math time

晚上好!

我刚开始搞乱JavaScript,我正在尝试做一些计算,但我不知道该怎么做。

所以在我的测试项目中,我正在抓取电视频道的EPG(ElectronicProgramGuide)串。
此字符串的开始和结束时间为show + minutes显示将持续多长时间。

例如:

  

现在:[ 21:00 - 22:45 ] + 25 分钟星球大战

所以这个字符串告诉我们,星球大战开启时,它开始于21:00,结束于22:45,它也表明有25分钟直到它结束。

对于结果,我正在尝试创建一个显示长度显示状态的进度条。

在HTML中我只有1个div,我在计算后输出<meter>

<div id="epgMeter">
</div>

所以,到目前为止,我已经从字符串中提取了所有需要的值。 但至于进一步的进展,我不知道如何做最好的数学。

var epgdata = "NOW: [15:00 - 16:00] +30 min Some Show";

//GET SHOW START AND END TIME
var startEnd = epgdata.split("[");
var startEnd = startEnd[1].split("]");
var stillToGo = startEnd[1].split(" min");
var startEnd = startEnd[0].split(" - ");

var stillToGo = stillToGo[0].replace('+', ''); //30
var showStart = startEnd[0]; //15:00
var showEnd = startEnd[1]; //16:00


//SOME MATH MAGIC SHOULD HAPPEN HERE SO THE OUTCOME WOULD BE 50% IN CURRENT CASE

var precentageOfshowLapsed = "50"; //JUST FOR TESTING

document.getElementById("epgMeter").innerHTML='<meter value="'+precentageOfshowLapsed+'" min="0" max="100"></meter>';

编辑:我们不应该使用当前时间,因为时区可能不同。

2 个答案:

答案 0 :(得分:2)

我将如何处理这个问题:

function getMinutes(str){
    var arr = str.split(":");
    if(arr.length == 1) return Number(arr[0])
    return Number(arr[0])*60+Number(arr[1])
}

var epgdata = "NOW: [15:00 - 16:00] +30 min Some Show";

var start = getMinutes(epgdata.match(/\[([^ ]*)/)[1]) // regex group
var end = getMinutes(epgdata.match(/([^ ]*)\]/)[1])// regex group

var stillToGo = getMinutes(epgdata.match(/(\d*) min/)[1])// regex group

var percentage = (1-(stillToGo/(end - start)))*100 // formula for remaining percentage

console.log(percentage)

end-start为我们提供了结束和开始之间的分钟数,这意味着节目的持续时间以分钟为单位。然后我们做StillToGo /(end-start),它给出了0到1之间的分钟百分比.ToGo。由于我们想要运行百分比而不是剩余的百分比,我们做1 - 所有这些。最后,乘以100得到0到100之间的百分比

答案 1 :(得分:0)

使用Date对象:

https://jsfiddle.net/deez2ho1/

此解决方案基本上创建两个Date对象,设置小时和分钟,计算差异(以毫秒为单位),然后计算百分比。但是从一开始就使用正则表达式可能是解析epgdata中的时间信息的更好解决方案;

var epgdata = "NOW: [15:00 - 16:00] +30 min Some Show";

//GET SHOW START AND END TIME
var startEnd = epgdata.split("[");
var startEnd = startEnd[1].split("]");
var stillToGo = startEnd[1].split(" min");
var startEnd = startEnd[0].split(" - ");

var stillToGo = stillToGo[0].replace('+', ''); //30
var showStart = startEnd[0]; //15:00
var showEnd = startEnd[1]; //16:00



// using Date Objects
// create the Dates
var start = new Date();
var end = new Date();

// set hours and minutes
start.setHours(parseInt(startEnd[0].split(":")[0], 10));
start.setMinutes(parseInt(startEnd[0].split(":")[1], 10));
end.setHours(parseInt(startEnd[1].split(":")[0], 10));
end.setMinutes(parseInt(startEnd[1].split(":")[1], 10));

var overallMinutes = (end - start) / (1000 * 60);
var precentageOfshowLapsed = parseInt(stillToGo, 10) / overallMinutes; 

precentageOfshowLapsed *= 100;

document.getElementById("epgMeter").innerHTML = '<meter value="' + precentageOfshowLapsed + '" min="0" max="100"></meter>';