首先,要获得准确的GMT时间,您需要一个您信任的来源。这意味着某个服务器。 Javascript通常只能进行HTTP调用,并且只发送到托管相关页面的服务器(同源策略)。因此,该服务器必须是您的GMT时间的来源。
我将配置您的Web服务器使用NTP与GMT同步其时钟,并让Web服务器通过写一个变量到页面告诉脚本什么时候。否则make和XmlHttpRequest回到服务器当你需要知道时间。缺点是,由于涉及延迟,这将是不准确的:服务器确定时间,将其写入响应,响应通过网络传播,并且当客户端的cpu给它一个时间片时,javascript执行等。在慢链接,如果页面大,你可以期望秒的延迟。您可以通过确定用户的时钟距离GMT有多远,并可以通过该偏移调整所有时间计算,从而节省一些时间。当然,如果用户的时钟是慢或快(不只是迟到或早),或者如果用户改变他们的PC上的时间,那么你的偏移量被吹。
还要记住,客户端可以更改数据,因此不要信任他们发送给您的任何时间戳。
编辑:
JimmyP’s answer非常简单,易于使用:使用Javascript添加< script>元素,它调用一个url,如http://json-time.appspot.com/time.json?tz=GMT.这是比自己做的更容易,因为json-time.appspot.com服务器工作作为GMT时间的来源,并提供这种数据,让你围绕同一起源政策。我建议为简单的网站。但是它有一个主要的缺点:json-time.appspot.com网站可以在用户的页面上执行任意代码。这意味着,如果该网站的操作符想要剖析您的用户或劫持他们的数据,他们可以这样做。即使您信任运算符,您也需要相信他们没有被黑客入侵或被入侵。对于商业网站或任何可靠性高的网站,我建议自己托管时间解决方案。
编辑2:
JimmyP’s answer有一个意见,建议json时间应用程序在它可以支持的请求数量方面有一些限制。这意味着如果您需要可靠性,您应该自己承载时间服务器。但是,应该很容易在您的服务器上添加一个页面,该页面使用相同格式的数据进行响应。基本上你的服务器接受一个查询,例如
http://json-time.appspot.com/time.json?tz=America/Chicago&callback=foo
并返回一个字符串如
foo({
"tz": "America\/Chicago",
"hour": 15,
"datetime": "Thu, 09 Apr 2009 15:07:01 -0500",
"second": 1,
"error": false,
"minute": 7
})
注意foo()包装JSON对象;这对应于查询中的callback = foo。这意味着当脚本加载到页面时,它会调用你的foo函数,它可以做任何它想要的时间。这个例子的服务器端编程是一个单独的问题。