【问题标题】:Time difference between server and browser服务器和浏览器的时间差
【发布时间】:2012-05-17 01:53:30
【问题描述】:

我们如何测量服务器时间和浏览器时间之间的时间差? 如果我们在浏览器和服务器上都以毫秒为单位,如果服务器和浏览器位于两个不同的时区,它会给我准确的结果吗?

【问题讨论】:

  • 似乎这完全取决于用户将时钟设置为什么时间。从技术上讲,我可以将时钟设置为我喜欢的任何时间。
  • 听起来你应该考虑使用NTP。
  • 让我们从如何计算浏览器时间和服务器时间开始。你能给我们看一些代码吗?还有你为什么要那样做。你想达到什么目的?
  • @BeRecursive:是的,我同意这一点。有没有办法获得差异?

标签: java javascript datetime timezone


【解决方案1】:

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

结果将精确到网络延迟。

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

【讨论】:

  • 我不太担心网络延迟。是的,正如你提到的那样,获得时间 frm JS 并将其发送到服务器是我打算做的。在这种比较中,如果浏览器和服务器的时区不同,它会准确吗?以毫秒为单位的时间是否也给了我包括时区偏移在内的差异?
【解决方案2】:

您可以通过JavascriptDate.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);

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多