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服务一次以获得客户端内部时间的差异,并使用它来更正它以进行显示。 但我不确定,为什么与客户端计算机时间的比较还不够。