如何通过 jQuery 获取时间服务器实时时间

How do I get time-server live time via jQuery

在 windows 中有一个选项可以通过时间服务器更正时间(来自 time.windows.com)。 是否有一个选项可以使用 js 或 jQuery 将时间服务器的时间获取到具有实时更新的网页(我是初学者)。 这不是本地计算机或网页托管服务器时间。 谢谢

Javascript 和 Jquery 是客户端脚本,因此使用 new Date() 将仅获取本地机器时间,您也无法获取服务器时间,否则向服务器端发出请求。要获得服务器时间,您需要向服务器端方法发出 AJAX 请求,这将 return 服务器时间。

这个问题太宽泛了,就像问"How do I develop a game? Like, a platforms one, with zombies."一样,不过我会尽量回答的。

ADVICE: 有些术语,如果你不知道它们的意思,你必须Google寻找它们。

答案很简单:通过连接到该服务器并检索信息。

你手里有哪些连接服务器的选项?

我可以考虑3个选项:

  • 通过 AJAX 请求。
  • 正在通过 WebSockets 连接。
  • 包括来自服务器的 JavaScript 文件。

在所有 3 种方法中,服务器必须准备好为您提供日期时间信息,因此您要么寻找提供获取日期时间信息方法的第三方服务,要么准备自己的服务器。

通过 AJAX 请求

这种方式比较典型。您向服务器发出 AJAX 请求并获取信息。您有两种获取信息的方法:直接返回时间数据或将时间数据附加到 headers 然后读取 headers.

为此,服务器需要为您的域启用 CORS。如果您不是服务器的所有者,这是一项艰巨的任务。

通过 WebSockets 连接

与AJAX的原则相同。您需要一个启用了 WebSockets 的服务器。所有现代浏览器都有一种名为 WebSocket 的新型套接字,它允许它们连接到 WebSocket-enabled 服务器并传输 realtime-data.

使用此方法,您将连接到服务器并直接接收信息或发送消息以接收信息。这完全取决于服务器实现。

此方法不需要CORS。

包括来自服务器的 JavaScript 文件

这个方法很奇怪,但是可以用。您附加一个 <script> 标签来加载位于服务器中的文件,文件内容是一个包含您想要的信息的变量。

获得信息后做什么

假设您完成了 3 种方法中的任何一种,并且您掌握了相关信息。该信息可以是日期时间 ISO 字符串或纪元号。这些是最简单的,因为您可以将它们直接传递给 Date 构造函数。

您不能执行 new Date() 并认为会自动计算差异。 new Date() 总是 returns 本地日期并且没有本地方法 "correct" 它,所以你必须创建自己的校正方法,所以在你得到信息后,你需要提取时间差异。

这很简单,获取本地纪元时间,服务器纪元时间并相减,就像这样:

var servertimeinfo = "2015-06-21T22:44:06.296Z"; // This is the server time info. Can be an epoch or a ISO string, like I mentioned above.
var servertime = new Date(servertime).getTime(); // With this you convert the server time to an epoch, so you always work in milliseconds
var mytime = Date.now(); // With this you get the local computer epoch in milliseconds
var diff = mytime - servertime; // And now you have the difference.

有了这个差异,您可以在每次需要时重新计算 Date object。如何?您创建一个看起来像这样的函数:

function newServerDate() {
    return new Date(Date.now() - diff);
}

所以每次你需要日期,而不是调用 var date = new Date();,你必须调用 var date = newServerDate();.

所以这就像做一个 new Date() 但每次都会减去服务器时间差。大多数库实际上是这样做的,但是由于 JavaScript 没有本地方法,您必须自己实现它。