从设定的日期和时间开始计数

时间:2012-04-11 00:58:08

标签: javascript

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

patroltimeCurrentTimeoffset 是返回的偏移值(EG:-729)

patroltimeStart 是用户开始巡逻的服务器上的日期和时间(EG: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;
    }

&lt; span&gt;控制:

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

1 个答案:

答案 0 :(得分:0)

我找到了来自&#34; How to get the time elapsed from a json date? &#34;的解决方案但是,如果有人能够弄清楚为什么我的解决方案不起作用(所以我可以奖励某些积分为我和其他人解释)我将奖励他们积分。我的解决方案是更改以下代码:

    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);