我怎样才能得到当前时间?(在JavaScript中)
不是你电脑的时间:
now = new Date; now_string = addZero(now.getHours()) + ":" + addZero(now.getMinutes()) + ":" + addZero(now.getSeconds());
但真正准确的世界时间?
我是否需要连接到服务器(很可能是,哪一个?我如何从中检索时间?)
我从google做的所有搜索都返回了(new Date).getHours()
.
编辑:
如果用户的计算机时间错误,我想避免显示错误的时间.
您可以使用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); });
首先,要获得准确的GMT时间,您需要一个您信任的来源.这意味着某处服务器.Javascript通常只能进行HTTP调用,而且只能访问托管相关页面的服务器(相同的源策略).因此,该服务器必须是您的GMT时间源.
我会将您的网络服务器配置为使用NTP将其时钟与GMT同步,并让网络服务器通过向页面写入变量来告诉脚本它的时间.或者,当您需要知道时间时,将make和XmlHttpRequest返回给服务器.缺点是由于所涉及的延迟,这将是不准确的:服务器确定时间,将其写入响应,响应通过网络传播,并且只要客户端的cpu给它一个时间片,javascript就会执行,等等.慢速链接如果页面很大,你可以预期延迟几秒钟.您可以通过确定用户时钟与GMT的距离来节省一些时间,并且只需通过该偏移调整所有时间计算.当然如果用户'
另请注意,客户端可以更改数据,因此不要信任他们发送给您的任何时间戳.
编辑:
JimmyP的答案非常简单易用:使用Javascript添加一个调用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
并返回一个字符串,如
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函数,它可以随时随地执行任何操作.此示例的服务器端编程是一个单独的问题.
你为什么不把时间用在每一页?例如html中的某个地方:
2009-03-03T23:32:12
然后,您可以在网站加载并解释日期时运行Javascript.这将减少网络必须完成的工作量.您可以存储相应的本地时间并在每次需要时计算偏移量.