服务器和浏览器之间的时差

时间:2012-05-08 14:50:47

标签: java javascript datetime timezone

我们如何衡量服务器时间和浏览器时间之间的时差? 如果我们在浏览器和服务器上花费时间毫秒,它会给我准确的结果,以防服务器和浏览器在两个不同的时区吗?

2 个答案:

答案 0 :(得分:3)

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

结果将准确到网络延迟。

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

答案 1 :(得分: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);