0

我有一个网页,当您单击开始巡逻时,会开始计算您单击按钮后的时间。因为我需要将它存储在服务器(ASP.NET)上,并且因为我想在他们重新加载页面时恢复计数,所以我从服务器获得了两个变量。第一个变量是他们单击开始巡逻按钮的服务器时间。第二个变量是本地时间与服务器时间的偏移量,因此我们 100% 准确地确定了时间量,并且由于本地时间,它不会关闭。以下代码有效,但时间已过。当前本地时间是 19:53,如果此函数运行,它将从“18:00:00”开始,然后上升“18:00:01”、“18:00:02”等...如果本地时间是 20:53 将是“19:00:00”。为什么这个功能会这样做,我该如何纠正这个问题?

巡逻时间当前时间偏移是返回的偏移值(例如:-729)

巡逻时间开始是用户开始巡逻的服务器上的日期和时间(例如:2012 年 4 月 10 日 20:01:13)

function UpdatePatrolTime() {
        var patroltimeCurrentTime = new Date();

        patroltimeCurrentTime.setTime(patroltimeCurrentTime.getTime() + patroltimeCurrentTimeoffset);

        var patroltimeStarted = new Date(patroltimeStart);
        var CompareDateTime = new Date((patroltimeCurrentTime.getTime()-patroltimeStarted.getTime()));

        currentHours = CompareDateTime.getHours();
        currentMinutes = CompareDateTime.getMinutes();
        currentSeconds = CompareDateTime.getSeconds();

        currentHours = (currentHours < 10 ? "0" : "") + currentHours;
        currentMinutes = (currentMinutes < 10 ? "0" : "") + currentMinutes;
        currentSeconds = (currentSeconds < 10 ? "0" : "") + currentSeconds;

        var currentTimeString = currentHours + ":" + currentMinutes + ":" + currentSeconds

        document.getElementById("patroltime").firstChild.nodeValue = currentTimeString;
    }

而 <span> 控件:

<span id="patroltime">00:00:00</span>
4

1 回答 1

0

我从“ How to get the time elapsed from a json date? ”中找到了一个解决方案,但如果有人能够弄清楚我上面的解决方案为什么不起作用(所以我可以奖励某人为我和可能的其他人解释)我会奖励他们积分。我的解决方案是更改以下代码:

    var patroltimeStarted = new Date(patroltimeStart);
    var CompareDateTime = new Date((patroltimeCurrentTime.getTime()-patroltimeStarted.getTime()));

    currentHours = CompareDateTime.getHours();
    currentMinutes = CompareDateTime.getMinutes();
    currentSeconds = CompareDateTime.getSeconds();

    var patroltimeStarted = new Date(patroltimeStart);
    var diff = (patroltimeCurrentTime-patroltimeStarted);

    currentHours = Math.floor(diff / 3600000);
    currentMinutes = Math.floor((diff % 3600000) / 60000);
    currentSeconds = Math.floor(((diff % 3600000) % 60000) / 1000);
于 2012-04-11T01:18:21.717 回答