首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过jQuery获得时间服务器的实时时间?

如何通过jQuery获得时间服务器的实时时间?
EN

Stack Overflow用户
提问于 2018-01-24 12:12:00
回答 2查看 1.3K关注 0票数 0

在windows中,有一个通过时间服务器(从time.windows.com)更正时间的选项。有没有办法让时间服务器的时间使用js或jQuery实时更新(我是初学者)的网页。这不是本地计算机或网页承载的服务器时间。谢谢

EN

Stack Overflow用户

回答已采纳

发布于 2018-01-25 10:51:34

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

的建议:有一些术语,如果你不知道它们的意思,你必须去谷歌寻找它们。

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

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

我可以想出三个选择:

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

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

通过执行AJAX请求

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

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

通过WebSockets连接

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

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

此方法不需要CORS。

包括来自服务器的JavaScript文件

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

在你得到信息之后该怎么办?

假设您完成了这三种方法中的任何一种,并且您拥有这些信息。信息可以是日期时间ISO字符串,也可以是划时代数字。这些是最简单的,因为您可以直接将它们传递给Date构造函数。

您不能执行new Date()并认为差异是自动计算的。new Date()总是返回本地日期,并且没有一个本机方法来“更正”它,所以您必须创建自己的更正方法,因此在获得信息之后,需要提取时间差。

这是一个简单的方法,例如获取本地时间、服务器时间和减法,如下所示:

代码语言:javascript
复制
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对象。多么?您将创建一个如下所示的函数:

代码语言:javascript
复制
function newServerDate() {
    return new Date(Date.now() - diff);
}

因此,每次您需要日期时,都必须调用var date = new Date();,而不是调用var date = newServerDate();

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

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48422194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档