晚上好!
我刚开始搞乱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>';
编辑:我们不应该使用当前时间,因为时区可能不同。
答案 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>';