2012-05-08 93 views
0

我们如何测量服务器时间和浏览器时间之间的时间差? 如果我们在浏览器和服务器上都花费毫秒时间,那么服务器和浏览器在两个不同的时区是否会给我提供准确的结果?服务器和浏览器之间的时间差

+0

看起来像这完全取决于用户的时钟设置为什么时间。我可以在任何我喜欢的技术上设定我的时钟。 – BeRecursive

+0

听起来你应该考虑使用[NTP](http://en.wikipedia.org/wiki/Network_Time_Protocol)。 –

+0

让我们从你如何计算浏览器时间和服务器时间开始。你会告诉我们一些代码吗?还有你为什么要这样做。你试图达到什么目标? –

回答

2

没有内置的方式。您应该在应用程序级别上执行此操作。您可以使用JavaScript检索时间并将此结果发送到服务器,您可以明显知道它是几点。现在比较这些结果。

结果将精确到网络延迟。

如果你只是想知道时区差异就足够了。但是,如果您想了解网络延迟,您可以估计它:将客户端时间从客户端发送到服务器,将服务器时间从服务器发送到客户端,并考虑时区偏移量。其余的是客户端 - >服务器 - >客户端延迟。将它除以2 - 这是单向延迟的第一个估计。更好的估计需要更多统计数据

+0

我不太担心网络延迟。是的,正如你所提到的,获得一段时间的JS并将它发送到服务器是我计划要做的事情。在这种情况下,如果浏览器和服务器的时区不同,这种比较是否准确?以毫秒为单位的时间是否会给我带来不同,包括时区偏移? – neo

0

您可以通过Javascript Date.getTimezoneOffset()获取客户端的时区GMT偏移量,并将该值保存到隐藏字段。下面是一个示例脚本,可用于确定客户端的时区:

var now = new Date(); 
var currentTimeZoneOffset = now.getTimezoneOffset(); 
var jan = new Date(now.getFullYear(), 0, 1, 2, 0, 0), jul = new Date(now.getFullYear(), 6, 1, 2, 0, 0); 
var hemisphere = (jan.getTime() % 24 * 60 * 60 * 1000) > (jul.getTime() % 24 * 60 * 60 * 1000); 
var dstOffset = hemisphere ? jan.getTimezoneOffset() : jul.getTimezoneOffset(); 
var standardOffset = hemisphere ? jul.getTimezoneOffset() : jan.getTimezoneOffset(); 
var gmtHours = -currentTimeZoneOffset/60; 
document.write("GMT time-zone offset: " + gmtHours +"<br>"); 
var isDstActive = (currentTimeZoneOffset-dstOffset) != 0; 
document.write("Daylight saving time is active: " + isDstActive + "<br>"); 
var isTimezoneWithDst = (dstOffset-standardOffset) != 0; 
document.write("DST is observed in this timezone: " + isTimezoneWithDst); 
相关问题