0

[パトロールの開始]をクリックすると、ボタンをクリックしてからの時間をカウントし始めるWebページがあります。これをサーバー(ASP.NET)に保存する必要があり、ページを再読み込みしたときにカウントを再開したいので、サーバーから2つの変数を取得します。最初の変数は、パトロール開始ボタンをクリックしたサーバー時間です。2番目の変数は、サーバー時間からの現地時間のオフセットであるため、時間の量は100%正確であり、現地時間のためにオフにはなりません。次のコードは機能しますが、時間はかなりずれています。現在、現地時間は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;
    }

そして<span>コントロール:

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

1 に答える 1

0

「 jsonの日付から経過時間を取得する方法」から解決策を見つけましたが、上記の解決策が機能しない理由を誰かが理解できれば(私や他の人に説明するために誰かにポイントを与えることができます)私は彼らにポイントを与えます。私の解決策は、次のコードを変更することでした。

    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 に答える