JavaScript NTP时间

我正在写一个计数脚本,它计算旧日期和今天之间的时间。
一切顺利,直到我在错误的日期的计算机上测试并看到结果。
所以我找到了一种通过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); 

首先,JS调度程序具有一定的粒度 – 也就是说,您可以请求小于20毫秒的间隔,但它不会立即触发 – 您可以看到的是每20毫秒触发的20个事件。

其次,即使你可以,这也不是一个好主意:你将每秒每台使用此脚本的计算机发出1000个请求。 即使客户端及其连接可以处理这个问题,它也就是JSON服务器的DDoS。

你能做的是:

  • 从JSON-NTP获得时间(一次),这将是一个日期
  • 得到当地时间(一次),这将是一个日期
  • 计算NTP和本地时间(一次)之间的差异,这可能是本地时间关闭的毫秒数
  • 对于每次计算,考虑差异

把它放在你文档的顶部:

 var clientTime = new Date(); 

这就在您的文档底部:

 var serverTime = new Date(""); 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; 

我不确定你理解NTP的用途:即计算机内部时钟的同步,而不是用于时钟本身。

我建议您连接到NTP服务一次以获得客户端内部时间的差异,并使用它来更正它以进行显示。 但我不确定,为什么与客户端计算机时间的比较还不够。