计算B站分P视频在自己所看P数的视频剩余时长

获取分P视频剩余时间

目前为 2023-02-24 提交的版本。查看 最新版本

// ==UserScript==
// @name         计算B站分P视频在自己所看P数的视频剩余时长
// @namespace    YuuRa1n
// @version      0.5
// @description  获取分P视频剩余时间
// @author       YuuRa1n
// @match        https://www.bilibili.com/video/*
// @grant        none
// @require      https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
// @license MIT
// ==/UserScript==

(function() {
    setTimeout(function(){
        let html = '<span><span class="item-text sumtime"></span></span>';
        $(".video-title").after(html);
        html = '<span><span class="item-text lefttime"></span></span>';
        $("div.video-data-list").append(html);
        calc();
    }, 2000);

    $("ul.list-box li").on("click", function(){
        calc();
    })
})();


function calc(){
    //获取当前播放视频位置(第几条)和总视频数
    const page = $(".cur-page").text();
    const pageNum = page.split("/");
    const curPageNum = parseInt(pageNum[0].substring(1),10);
    let hourList = [];
    let minList = [];
    let secList = [];
    $("div.duration").each(function(){
        const time = $(this).text();
        const list = time.split(":");
        if(list.length == 3){
            hourList.push(list[0]);
            minList.push(list[1]);
            secList.push(list[2]);
        }else{
            hourList.push(0);
            minList.push(list[0]);
            secList.push(list[1]);
        }
    })

    //计算视频总时长
    const sumTime = calcLeftTime(hourList, minList, secList)

    $("span.sumtime").html("视频总时长:" + sumTime);

    //计算视频剩余时间
    const subHourList = hourList.slice(curPageNum - 1);
    const subminList = minList.slice(curPageNum - 1);
    const subsecList = secList.slice(curPageNum - 1);
    const leftTime = calcLeftTime(subHourList, subminList, subsecList);
    $("span.lefttime").html("剩余时长:" + leftTime);
}

//给定时间数组和秒数组,数组长度必须相等,计算剩余时间
function calcLeftTime(hourList, minList, secList){
    if(minList.length != secList.length){
        return "计算失败";
    }else{
        let hour = listsum(hourList);
        let min = listsum(minList);
        let sec = listsum(secList);
        let m = sec / 60;

        let s = sec % 60;

        min += parseInt(m,10);

        let h = parseInt(min/60,10) + hour;
        m = min%60;

        if(m<10)
            m="0"+ m;
        if(s<10)
            s="0"+ s;
        return h+":"+m+":"+s;
    }
}

function listsum(list){
    let sum = 0;
    for(let i =0;i<list.length;i++ ){
        sum += parseInt(list[i],10)
    }
    return sum;
}