我怎样才能得到当前时间?(在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)
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函数,它可以随时随地执行任何操作.此示例的服务器端编程是一个单独的问题.
你为什么不把时间用在每一页?例如html中的某个地方:
<span id="time" style="display:none;">
2009-03-03T23:32:12
</span>
Run Code Online (Sandbox Code Playgroud)
然后,您可以在网站加载并解释日期时运行Javascript.这将减少网络必须完成的工作量.您可以存储相应的本地时间并在每次需要时计算偏移量.