正在计算%javascript中的时间间隔

正在计算%javascript中的时间间隔,javascript,math,time,Javascript,Math,Time,晚上好 我刚开始玩JavaScript,我正在尝试做一些计算,但我不知道怎么做 所以在我的测试项目中,我正在抓取电视频道的EPG(ElectronicProgramGuide)字符串。 此字符串具有“显示的开始和结束时间+显示将持续多长时间的分钟数” 例如: 现在:[21:00-22:45]+25分钟星球大战 所以这条线告诉我们,在《星球大战》上映的那个一刻,它从21:00开始,到22:45结束,它还显示还有25分钟就要结束了 对于结果,我尝试创建一个显示长度的显示状态进度条 在HTML中,我只

晚上好

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

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

例如:

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

所以这条线告诉我们,在《星球大战》上映的那个一刻,它从21:00开始,到22:45结束,它还显示还有25分钟就要结束了

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

在HTML中,我只有1个div,在进行计算后,我在其中输出

<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>';
var epgdata=“现在:[15:00-16:00]+30分钟一些节目”;
//获取节目开始和结束时间
var startEnd=epgdata.split(“[”);
var startEnd=startEnd[1]。拆分(“]”);
var stillToGo=startEnd[1]。拆分(“最小”);
var startEnd=startEnd[0]。拆分(“-”;
var stillToGo=stillToGo[0]。替换('+','')//30
var showStart=startEnd[0]//15:00
var showEnd=startEnd[1]//16:00
//一些数学魔术应该在这里发生,所以在目前的情况下,结果将是50%
var precentageOfshowLapsed=“50”//只是为了测试
document.getElementById(“epgMeter”).innerHTML='';

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

我将如何处理这个问题:

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/(结束-开始)
,它给我们0到1之间的时间百分比。因为我们想要的是运行百分比而不是剩余百分比,所以我们只需要1-所有这些。最后,乘以100,使百分比介于0和100之间

我将如何处理这个问题:

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/(结束-开始)
,它给我们0到1之间的时间百分比。因为我们想要的是运行百分比而不是剩余百分比,所以我们只需要1-所有这些。最后,使用日期对象乘以100,使百分比介于0和100之间:

此解决方案基本上创建两个日期对象,设置小时和分钟,以毫秒为单位计算差值,然后计算百分比。但是从一开始就使用regex可能是解析
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>';
var epgdata=“现在:[15:00-16:00]+30分钟一些节目”;
//获取节目开始和结束时间
var startEnd=epgdata.split(“[”);
var startEnd=startEnd[1]。拆分(“]”);
var stillToGo=startEnd[1]。拆分(“最小”);
var startEnd=startEnd[0]。拆分(“-”;
var stillToGo=stillToGo[0]。替换('+','')//30
var showStart=startEnd[0]//15:00
var showEnd=startEnd[1]//16:00
//使用日期对象
//创建日期
var start=新日期();
var end=新日期();
//设定小时和分钟
setHours(parseInt(startEnd[0].split(“:”[0],10));
setMinutes(parseInt(startEnd[0].split(“:”[1],10));
end.setHours(parseInt(startEnd[1].split(“:”[0],10));
end.setMinutes(parseInt(startEnd[1].split(“:”[1],10));
var总分钟数=(结束-开始)/(1000*60);
var precentageOfshowLapsed=parseInt(stillToGo,10)/总分钟数;
前角角点*=100;
document.getElementById(“epgMeter”).innerHTML='';
使用日期对象:

此解决方案基本上创建两个日期对象,设置小时和分钟,以毫秒为单位计算差值,然后计算百分比。但是从一开始就使用regex可能是解析
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>';
var epgdata=“现在:[15:00-16:00]+30分钟一些节目”;
//获取节目开始和结束时间
var startEnd=epgdata.split(“[”);
var startEnd=startEnd[1]。拆分(“]”);
var stillToGo=startEnd[1]。拆分(“最小”);
var startEnd=startEnd[0]。拆分(“-”;
var stillToGo=stillToGo[0]。替换('+','')//30
var showStart=startEnd[0]//15:00
var showEnd=startEnd[1]//16:00
//使用日期对象
//创建日期
var start=新日期();
var end=新日期();
//设定小时和分钟
setHours(parseInt(startEnd[0].split(“:”[0],10));
setMinutes(parseInt(startEnd[0].split(“:”[1],10));
end.setHours(parseInt(startEnd[1].split(“:”[0],10));
end.setMinutes(parseInt(startEnd[1].split(“:”[1],10));
var总分钟数=(结束-开始)/(1000*60);
var precentageOfshowLapsed=parseInt(stillToGo,10)/总分钟数;
前角角点*=100;
document.getElementById(“epgMeter”).innerHTML='';

这是一个很好的方法,只需再问一个问题,如果stillToGo更精确,例如30.2(注意点不是逗号)而不是30,该怎么办。那么前面的说法就错了。把它从0.2中拿出来是更好的还是我们可以绕开它?好吧,30.2是多少?30分钟加12秒?好问题,可能是的(我不生成epg,我从网页解析它)。它不是那么重要,使它如此精确,也许是更好地用Srang.S拆除器或在正则表达式中进行过滤。在任何情况下,为了使正则表达式工作,您需要将其更改为<代码> EPGATATIONS。匹配(//+(**)min /)[1 ] < /代码>考虑该点,然后更改<代码>返回数(ARR(0))< /代码>至<代码>返回数(ARR〔0〕)拆分。“)”[0])放弃它这是一个很好的方法,只需再问一个问题,如果stillToGo更精确,例如30.2(注意点不是逗号)而不是30,那么前面的符号就错了。最好是去掉.2,还是我们可以将其四舍五入