0

サーバーによって時間が初期化されたクロックを作成し、次のコードでクライアントを続行したい:

//initializing by server(ASP.NET):
<% var now=System.DateTime.Now; %>
var h=<%=now.Hour %>;
var m=<%=now.Minute %>;
var s=<%=now.Second %>;

//then client:
function startTime() {
   s++;
   if (s == 60) {
       s = 0;
       m++;
       if (m == 60) {
           m = 0;
           h++;
           if (h == 24)
               h = 0;
       }
   }
   m = checkTime(m);
   s = checkTime(s);
   h = checkTime(h);
   document.getElementById('clock').innerHTML = h + ":" + m + ":" + s;
   t = setTimeout(function () { startTime() }, 1000);
}

function checkTime(i) {

   if (i < 10) {
       if(i.toString().length<2)
           i = "0" + i;
   }
return i;
}
window.load = startTime();

ただし、時計は10分ごとに約5秒遅れます。

この遅延を防ぐにはどうすればよいですか?

4

2 に答える 2

1

setTimeout正確なタイミングを行うのに十分正確ではありません。10ms他に何も起こっていないときでも、簡単にオフにすることができます。長期間にわたって、これは時計をゆがめます。

クロックを実装する別の方法は、ネイティブDateオブジェクトを使用して計算を行い、システム クロックに依存し、setTimeout時間を視覚的に更新するためだけに使用することです。

setTimeout設定できる毎秒の時間を確実に更新できない100msため、毎秒10回更新を試みます。時間の計算が重すぎない場合、これはうまく機能するはずです。

使用方法については、仕様を確認してくださいDate: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date (Mozilla Firefox)

于 2013-07-25T10:02:54.343 に答える