10

古い日付から今日までの時間をカウントするカウント スクリプトを作成しています。
間違った日付のコンピューターでテストして結果が表示されるまで、すべてがうまくいきました。
そこで、http://json-time.appspot.com/time.jsonを介して NTP 時間を取得する方法を見つけました。
問題は、ミリ秒をカウントしたいのでミリ秒ごとに現在の時刻が必要なことですが、ミリ秒ごとに NTP サーバーにリクエストを送信することは不可能です。
これは、私が書いていることを確認するためのサンプルコードです

            var today;
        $(document).ready(function(){

            $.data = function(success){
                $.get("http://json-time.appspot.com/time.json?callback=?", function(response){
                    success(new Date(response.datetime));
                }, "json");
            };
        });

        function update(){
            var start = new Date("March 25, 2011 17:00:00");
            //var today = new Date();
            $.data(function(time){
                today = time;
            });
            var bla = today.getTime() - start.getTime();
            $("#milliseconds").text(bla);
        }

        setInterval("update()", 1);
4

3 に答える 3

11

まず第一に、JS スケジューラには特定の粒度があります。つまり、たとえば 20 ミリ秒よりも短い間隔を要求できますが、すぐには開始されません。20 ミリ秒ごとに 20 個のイベントが発生することがわかります。

第二に、できたとしても、これは良い考えではありません。このスクリプトを使用するすべてのコンピューターから、毎秒1000 のリクエストを行うことになります。クライアントとその接続がこれを処理できたとしても、JSON サーバーに対する DDoS にほかなりません。

あなたができることはこれです:

  • JSON-NTP から時刻を取得します (1 回)。これは Date になります
  • 現地時間を取得します (1 回)。これは Date になります
  • NTP と現地時間の差を計算します (1 回)。これは、現地時間がずれているミリ秒数になる可能性があります。
  • 毎回の計算で、差を考慮に入れます
于 2011-04-02T08:59:47.487 に答える
4

これをドキュメントの一番上に配置します。

var clientTime = new Date();

そしてこれはあなたの文書の一番下にあります:

var serverTime = new Date("<have the server put here its current date/time along its timezone>");
var deltaTime = serverTime - clientTime; // in milliseconds (expected accuracy: < 1 second)

次に、何かの期間を知る必要がある場合:

var startTime = new Date();

// [processing...]

var endTime = new Date();
var duration = endTime - startTime; // in milliseconds
var startTimeServer = startTime + deltaTime;
var endTimeServer = endTime + deltaTime;
于 2011-04-02T09:17:57.610 に答える
2

NTP の目的を理解しているかどうかはわかりません。つまり、コンピューターの内部クロックの同期であり、クロック自体としては使用されません。

一度 NTP サービスに接続して、クライアントの内部時刻との差を取得し、それを使用して表示用に修正することをお勧めします。しかし、なぜクライアント コンピューターの時間との比較が十分でないのか、正確にはわかりません。

于 2011-04-02T08:56:24.720 に答える