【问题标题】:JavaScript NTP timeJavaScript NTP 时间
【发布时间】:2011-04-02 08:48:46
【问题描述】:

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

【问题讨论】:

标签: javascript jquery time ntp


【解决方案1】:

把它放在文档的顶部:

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;

【讨论】:

  • 这与NTP无关
  • 你不懂问题
  • @CrapoWolf 我了解 OP 试图完成的任务(“我正在编写一个计算旧日期和今天之间时间的计数脚本”)以及 OP 试图做的事情这是不切实际的(每毫秒发送一个请求),并且可能不会产生预期的结果。因此,我指出了如何以不同的方式做事以实现 OP 实际尝试做的事情。如果您有不同的需求,因此我的回答不适用于您的具体案例,请随时创建一个新问题。
  • @timaschew 也没有这个问题,如果你仔细阅读的话。 :D
【解决方案2】:

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

其次,即使可以,这也不是一个好主意:您将每秒从使用此脚本的每台计算机发出 1000 个请求。即使客户端和他们的连接可以处理这个问题,对于 JSON 服务器来说也无异于 DDoS。

你可以这样做:

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

【讨论】:

  • 谢谢!就是这样:)
【解决方案3】:

我不确定您是否了解 NTP 的用途:即同步计算机内部时钟,而不是用作时钟本身。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    相关资源
    最近更新 更多