一尘不染

获取当前的GMT世界时间

javascript

我如何获得当前时间?(在JavaScript中)

不像您的计算机时间:

now = new Date;
now_string = addZero(now.getHours()) + ":" + addZero(now.getMinutes()) + ":" + addZero(now.getSeconds());

但是真实的世界时间呢?

我是否需要连接到服务器(很可能是,是哪一个?以及如何从中获取时间?)

我从Google进行的所有搜索都返回(new Date).getHours()

编辑:

如果用户的计算机时间错误,我想避免显示不正确的时间。


阅读 1864

收藏
2020-05-01

共1个答案

一尘不染

首先,要获得准确的GMT时间,您需要一个值得信赖的来源。这意味着某个服务器在某处。Javascript通常只能进行HTTP调用,并且只能对托管有问题的页面的服务器进行调用(相同的源策略)。因此,该服务器必须是GMT时间的来源。

我将您的Web服务器配置为使用NTP与GMT同步其时钟,并通过向页面写入变量来使Web服务器告诉脚本现在几点。否则,当您需要了解时间时,将make和XmlHttpRequest返回到服务器。缺点是,由于涉及到的延迟,这将是不准确的:服务器确定时间,将其写入响应,响应通过网络传输,并且只要客户端的cpu给它一个时间片,就执行javascript,等等。如果页面很大,慢速链接可能会延迟几秒钟。您可以通过确定用户时钟与GMT的距离来节省一些时间,并通过该偏移量调整所有时间计算。当然,如果用户

还请记住,客户端可以更改数据,所以不要相信他们发送给您的任何时间戳。

编辑 : 非常简单易用:使用Javascript添加<script>调用url
的元素,这比自己动手做起来容易,因为json-time.appspot.com服务器用作GMT时间的来源,并以允许您解决同源策略的方式提供此数据。对于简单的网站,我建议您这样做。但是,它有一个主要缺点:json-time.appspot.com网站可以在用户页面上执行任意代码。这意味着,如果该站点的运营商想要分析您的用户或劫持他们的数据,他们可以轻松地做到这一点。即使您信任操作员,也需要相信他们没有被黑客入侵或受到破坏。对于商务站点或任何具有高度可靠性问题的站点,我建议您自己托管时间解决方案。

编辑2 : 这意味着,如果需要可靠性,则应自己托管时间服务器。但是,在服务器上添加以相同数据格式响应的页面应该足够容易。基本上,您的服务器接受一个查询,例如

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函数,该函数可以随时随地执行任何操作。此示例的服务器端编程是一个单独的问题。

2020-05-01