首先,要获得准确的 GMT 时间,您需要一个您信任的来源。这意味着某处的某些服务器。Javascript 通常只能进行 HTTP 调用,并且只能调用托管相关页面的服务器(同源策略)。因此,该服务器必须是 GMT 时间的来源。
我会将您的网络服务器配置为使用 NTP 将其时钟与 GMT 同步,并让网络服务器通过向页面写入变量来告诉脚本它的时间。或者在您需要知道时间时将 XmlHttpRequest 和 XmlHttpRequest 返回到服务器。不利的一面是,由于所涉及的延迟,这将是不准确的:服务器确定时间,将其写入响应,响应通过网络传输,并且每当客户端的 cpu 给它一个时间片等时,javascript 就会执行。慢速链接如果页面很大,您可能会延迟几秒钟。您可以通过确定用户时钟与格林威治标准时间相差多远来节省一些时间,只需通过该偏移量调整所有时间计算。当然,如果用户'
还要记住,客户端可以更改数据,因此不要相信他们发送给您的任何时间戳。
编辑:
JimmyP 的回答非常简单且易于使用:使用 Javascript 添加一个<script>
调用 url的元素,例如http://json-time.appspot.com/time.json?tz=GMT. 这比您自己做要容易,因为 json-time.appspot.com 服务器用作 GMT 时间的来源,并以允许您解决同源策略的方式提供此数据。对于简单的网站,我建议这样做。但是它有一个主要缺点:json-time.appspot.com 站点可以在您用户的页面上执行任意代码。这意味着,如果该站点的运营商想要分析您的用户或劫持他们的数据,他们可以轻松完成。即使您信任运营商,您也需要相信他们没有被黑客入侵或入侵。对于商业站点或任何具有高可靠性问题的站点,我建议您自己托管时间解决方案。
编辑 2:
JimmyP 的回答有一条评论,表明 json-time 应用程序在它可以支持的请求数量方面有一些限制。这意味着如果您需要可靠性,您应该自己托管时间服务器。但是,在您的服务器上添加一个响应相同格式数据的页面应该很容易。基本上你的服务器需要一个查询,例如
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 函数,它可以随时间做任何它想做的事情。此示例的服务器端编程是一个单独的问题。