Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可以找到HTML5文件上传的ETA吗?_Javascript_Jquery_Html - Fatal编程技术网

Javascript 可以找到HTML5文件上传的ETA吗?

Javascript 可以找到HTML5文件上传的ETA吗?,javascript,jquery,html,Javascript,Jquery,Html,我的网站上有一个html5文件上传脚本 它可以与这个progressbar脚本配合使用 xhr.upload.addEventListener("progress", function(e) { var pc = parseInt(100 - (e.loaded / e.total * 100)); var pci = parseInt(e.loaded / e.total * 100); //get us our ETA

我的网站上有一个html5文件上传脚本

它可以与这个progressbar脚本配合使用

xhr.upload.addEventListener("progress", function(e) {
            var pc = parseInt(100 - (e.loaded / e.total * 100));
            var pci = parseInt(e.loaded / e.total * 100);
            //get us our ETA
            //kilobytes or megabytes?
            var pcia = e.loaded / 1024;
            var pcia2 = e.total / 1024;
            if (pcia2 > 1024)
            {
                pcia = pcia / 1024
                pcia2 = pcia2 / 1024;
                progress.style.backgroundPosition = pc + "% 0";
                elapsedtime = startTime + new Date();
                alert(startTime);alert(new Date());
                var eta = ((e.total / e.loaded) * elapsedtime) - elapsedtime;
            progress.innerHTML = pci + "% (" + Math.ceil(pcia * 100)/100 + " MB of " + Math.ceil(pcia2 * 100)/100 + " MB)-(" + eta +" secs. remaining)";
            }
            else
            {
                progress.style.backgroundPosition = pc + "% 0";
            progress.innerHTML = pci + "% (" + Math.ceil(pcia * 100)/100 + " KB of " + Math.ceil(pcia2 * 100)/100 + " KB)-(" + eta +" secs. remaining)";
            }
        }, false);
好的,我已经通知了开始时间和调用进度的时间。 但是变量ETA显示为NaN。
你怎样才能做到像date(“Y-m-DH:i:s”);(来自php)在javascript中?

要查找ETA,必须将代码更改为此。
这里所做的更改是我们有两个新变量,分别命名为startTime和now

上传一开始就放置var startTime,它的语法应该与var now相同

这个脚本将告诉用户完成的百分比,上传的kb/mb与总计kb/mb,现在是文件上传的ETA

xhr.upload.addEventListener("progress", function(e) {

    var pc = parseInt(100 - (e.loaded / e.total * 100));
    var pci = parseInt(e.loaded / e.total * 100);
    //get us our ETA
    //kilobytes or megabytes?
    var pcia = e.loaded / 1024;
    var pcia2 = e.total / 1024;
    if (pcia2 > 1024)
    {
    pcia = pcia / 1024
    pcia2 = pcia2 / 1024;
    var now = (new Date()).getTime(); 
    var elapsedtime = now - startTime;
    elapsedtime = elapsedtime / 1000;
    var eta = ((e.total / e.loaded) * elapsedtime) - elapsedtime;
    eta = Math.round(eta);
    progress.innerHTML = pci + "% (" + Math.ceil(pcia * 100)/100 + " MB of " + Math.ceil(pcia2 * 100)/100 + " MB)-(" + eta +" secs. remaining)";alert(pci); progress(pci, $('#progress'));
        }
        else
        {
        var now = (new Date()).getTime(); 
        var elapsedtime = now - startTime;
        elapsedtime = elapsedtime / 1000;
        var eta = ((e.total / e.loaded) * elapsedtime) - elapsedtime;
        progress.innerHTML = pci + "% (" + Math.ceil(pcia * 100)/100 + " KB of " + Math.ceil(pcia2 * 100)/100 + " KB)-(" + eta +" secs. remaining)"; progress(pci, $('#progress'));
                }
            }, false);

您可以推断自上传开始以来
e.loaded
的平均变化率,以估计需要多长时间。不过,没有办法确定。我在github示例中看到过类似的东西,但这太复杂了,我不知道它会有多复杂。获取上传开始时的时间,然后在每个
进度
事件中计算ETA作为
((总/加载)*已用时间)-已用时间
开始时间=新日期()。在每一个进步事件中都是如此。@jordanzhninja没问题。既然你已经解决了自己的问题,你应该把这个解决方案作为一个答案发布并接受它,这样以后的任何人都可以从中受益。