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

标签 javascript jquery timestamp real-time nstimer

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

最佳答案

这个问题太宽泛了,就像问“我如何开发一款游戏?比如,一个有僵尸的平台游戏。”,但我会尽力回答它。

建议:如果您不知道某些术语的含义,则必须在 Google 上查找它们。

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

您有哪些连接到服务器的选项?

我可以考虑 3 个选择:

  • 通过执行 AJAX 请求。
  • 通过 WebSocket 连接。
  • 包含来自服务器的 JavaScript 文件。

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

通过执行 AJAX 请求

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

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

通过 WebSocket 连接

与 AJAX 的原理相同。您需要一台启用了 WebSocket 的服务器。所有现代浏览器都有一种称为 WebSocket 的新型套接字,它允许它们连接到支持 WebSocket 的服务器并传输实时数据。

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

该方法不需要CORS。

包含来自服务器的 JavaScript 文件

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

获得信息后该怎么做

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

你不能做 new Date()并认为差异将被自动计算。 new Date()总是返回本地日期,并且没有本地方法来“纠正”它,因此您必须创建自己的纠正方法,因此在获得信息后,您需要提取时差。

这很简单,只需获取本地纪元时间、服务器纪元时间并减去,如下所示:

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每次需要时都对象。如何?您创建一个如下所示的函数:

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

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

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

关于javascript - 如何通过 jQuery 获取时间服务器的实时时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48422194/

相关文章:

ios - 将时间戳转换为 NSDate

Javascript/jquery - 在 dom 中上升 2 层(我们称这个对象为 "A"),然后将 css 应用到 "A"的子对象之一

javascript - 展开数组中的对象

javascript - 如何使用 jQuery 在鼠标悬停时显示按钮?

javascript - 使用数组参数构建 URL

javascript - "Like"使用 Facebook 打开图的帖子

php - 如何手动将时间戳插入 mySQL 数据库?

javascript - 旋转木马 slider 不适用于 Flexbox

javascript - 应用程序脚本中的 "Missing ) after argument list."

双表MySQL时间戳(需要计算百分比)