在windows中,有一个通过时间服务器(从time.windows.com)更正时间的选项。有没有办法让时间服务器的时间使用js或jQuery实时更新(我是初学者)的网页。这不是本地计算机或网页承载的服务器时间。谢谢
发布于 2018-01-25 10:51:34
这个问题太宽泛了,就像问“我如何开发一个游戏?就像一个平台,一个有僵尸的平台”,但我会试着回答。
的建议:有一些术语,如果你不知道它们的意思,你必须去谷歌寻找它们。
答案很简单:通过连接到服务器并检索信息。
您手中有哪些连接到服务器的选项?
我可以想出三个选择:
在所有三种方法中,服务器必须准备好为您提供日期时间信息,所以您要么去查找提供获取日期时间信息的方法的第三方服务,要么准备您自己的服务器。
通过执行AJAX请求
这条路是典型的。您向服务器发出AJAX请求并获取信息。您有两种获取信息的方法:直接返回时间数据或将时间数据附加到标头中,然后读取标头。
为此,服务器需要为您的域启用CORS。如果您不是服务器的所有者,这将是一项困难的任务。
通过WebSockets连接
与AJAX相同的原则也适用。您需要启用WebSockets的服务器。所有现代浏览器都有一种名为WebSocket的新型套接字,它允许它们连接到启用WebSocket的服务器并传输实时数据。
使用此方法,您将连接到服务器,直接接收信息或发送消息以接收信息。这完全取决于服务器实现。
此方法不需要CORS。
包括来自服务器的JavaScript文件
这是一个奇怪的方法,但可以工作。您可以附加一个<script>标记来加载位于服务器中的文件,并且文件内容是一个变量,其中包含您想要的信息。
在你得到信息之后该怎么办?
假设您完成了这三种方法中的任何一种,并且您拥有这些信息。信息可以是日期时间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没有本地方法,所以您必须自己实现它。
https://stackoverflow.com/questions/48422194
复制相似问题