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

时间:2018-01-24 12:12:01

标签: javascript jquery timestamp real-time nstimer

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

2 个答案:

答案 0 :(得分:1)

这个问题过于广泛,比如问“我如何开发游戏?就像平台一样,有僵尸。”,但我会尝试回复它。

建议:有些条款如果您不知道它们的含义,您必须向Google查找。

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

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

我可以考虑3个选项:

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

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

通过执行AJAX请求

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

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

通过WebSockets连接

与AJAX相同的原则适用。您需要一个启用了WebSockets的服务器。所有现代浏览器都有一种称为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没有本机方法,你必须自己实现它。

答案 1 :(得分:0)

Javascript和Jquery是客户端脚本,因此使用新的Date()只会获得本地机器时间,也无法获得服务器时间,而是向服务器端发出请求。要获得服务器时间,您需要向服务器端方法发出AJAX请求,这将返回服务器时间。