获得当前的GMT世界时间

fms*_*msf 35 javascript

我怎样才能得到当前时间?(在JavaScript中)

不是你电脑的时间:

now = new Date;
now_string = addZero(now.getHours()) + ":" + addZero(now.getMinutes()) + ":" + addZero(now.getSeconds());
Run Code Online (Sandbox Code Playgroud)

但真正准确的世界时间?

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

我从google做的所有搜索都返回了(new Date).getHours().

编辑:

如果用户的计算机时间错误,我想避免显示错误的时间.

Jam*_*mes 26

您可以使用JSON [P]并访问时间API:

(下面的代码应该可以正常工作,只需测试它......)

function getTime(zone, success) {
    var url = 'http://json-time.appspot.com/time.json?tz=' + zone,
        ud = 'json' + (+new Date());
    window[ud]= function(o){
        success && success(new Date(o.datetime));
    };
    document.getElementsByTagName('head')[0].appendChild((function(){
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.src = url + '&callback=' + ud;
        return s;
    })());
}

getTime('GMT', function(time){
    // This is where you do whatever you want with the time:
    alert(time);
});
Run Code Online (Sandbox Code Playgroud)

  • 现在给出404错误`远程地址:74.125.200.141:80请求URL:http://json-time.appspot.com/time.json?tz = GMT&callback = json1439373722068请求方法:GET状态代码:404 Not Found` (5认同)
  • API工作正常,但今晚它已经下降,因为它超过了当天的谷歌配额.免费AppEngine帐户的配额每天只有130万个请求. (3认同)

Mr.*_* 安宇 20

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

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

另请注意,客户端可以更改数据,因此不要信任他们发送给您的任何时间戳.

编辑: 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 app在它可以支持的请求数量方面有一些限制.这意味着如果您需要可靠性,您应该自己托管时间服务器.但是,在服务器上添加一个响应相同格式数据的页面应该很容易.基本上你的服务器接受诸如的查询

http://json-time.appspot.com/time.json?tz=America/Chicago&callback=foo
Run Code Online (Sandbox Code Playgroud)

并返回一个字符串,如

foo({
 "tz": "America\/Chicago", 
 "hour": 15, 
 "datetime": "Thu, 09 Apr 2009 15:07:01 -0500", 
 "second": 1, 
 "error": false, 
 "minute": 7
})
Run Code Online (Sandbox Code Playgroud)

注意foo()哪个包装了JSON对象; 这对应于查询中的callback = foo.这意味着当脚本加载到页面中时,它将调用你的foo函数,它可以随时随地执行任何操作.此示例的服务器端编程是一个单独的问题.

  • 有用的teory(不是开玩笑,也不是阻碍):)但我该怎么做?我在javascript中== noob (2认同)

Geo*_*lly 6

你为什么不把时间用在每一页?例如html中的某个地方:

<span id="time" style="display:none;">
    2009-03-03T23:32:12
</span>
Run Code Online (Sandbox Code Playgroud)

然后,您可以在网站加载并解释日期时运行Javascript.这将减少网络必须完成的工作量.您可以存储相应的本地时间并在每次需要时计算偏移量.