6

我被要求在我们的网站上显示“正确”时间,坦率地说,我觉得这毫无意义,因为“正确”可以用多种方式解释。

我们当前的方法肯定会导致时间不准确,因为它使用服务器控件呈现 JavaScript,该 JavaScript 使用来自服务器的日期时间作为参数运行 onload,以在 JavaScript 中创建一个时钟对象,最终呈现在页面上,然后开始递增时钟。在服务器处理、网络延迟和客户端性能(还有很多其他的负载运行)之间,时钟最终与实际服务器时间相差甚远,与客户端 PC 相比谁知道呢。

因此,为了获得“正确”的时间,我可以;

  • 使用本地 PC 时间并将 new Date() 传递给 JavaScript 时钟对象。优点:应尽可能接近 PC 时钟。缺点:不确定 PC 时钟在哪个时区的准确度更不用说。
  • 使用网络服务向 NTP 服务器发送 TCP 请求以更新网页上的时钟。优点:如果本地 PC 也同步到 NTP 将是准确和最佳匹配。缺点:必须处理与我们的服务器相关的所有时区调整。如果 PC 时钟不匹配,仍然会出现不匹配。

我是实现自己的网络服务还是使用类似的东西;地球工具或世界时间网络服务(编辑:链接已删除 - 现在 404)

这是Jon Galloway 的一篇关于原子钟网络服务的博客文章,它已经很老了,但当我用谷歌搜索时排名很高,他没有得出结论。

希望我能赢得管理层的争论,如果您不在那个时区,为什么同步到我们的服务器时钟 (GMT) 没有意义,以及为什么我们甚至需要匹配本地 PC。

我缺少这方面的任何角度吗?

4

5 回答 5

2

我需要在拍卖网络应用程序中向客户显示准确的时间。您可以将当前服务器时间与页面一起发送并立即初始化 javascript,而无需等待页面的其余部分加载。因此,您只需要处理网络延迟,在最坏的情况下可能不会超过几秒钟。

在那之后,你非常接近准确的时间。只要您的 Javascript 计时器代码编写正确,您就不会在下一页加载之前远远不同步。但是我见过很多糟糕的 JS 时钟代码。(提示:Date() 好,setTimeout() 不好。)

如果您有一个用户要长时间使用的应用程序,只需通过重新加载页面或 Ajax 来刷新您的时间同步。

我不会担心时区,只需使用 UTC 时间,这样就不会混淆什么时候会发生。

于 2008-10-28T18:17:35.350 回答
1

首先,确保您的客户知道 Windows、Linux 和 OSX 都有内置时钟,这些时钟几乎总是对用户可见(或很容易可见)。此外,请确保您的客户知道物理时钟通常位于任何可能设置为对操作系统隐藏内置时钟的信息亭附近。

如果您知道这一点,并且您的客户仍然希望在您的网站上使用时钟,请让您的客户定义“正确”时间,然后实施与其​​定义相匹配的解决方案(您的两个解决方案似乎都会处理最有可能的两个定义)。

于 2008-10-28T17:59:25.107 回答
0

您可以使用地理定位来了解网站访问者的实际位置,并在您的数据库中存储该区域的 (GMT - XX:XX),然后根据请求的位置计算时间。这将节省到任何第三方 Web 服务的长途旅行。

于 2008-10-28T17:57:50.897 回答
0

您可以实现它的另一种方法是使用IP Geolocation。有些服务可以根据用户的 ip(通常包括他们的时区)告诉您用户从哪里连接,并将该信息与服务器的实时时钟相结合,您可以向用户显示当地时间。

它远非完美,特别是对于似乎从他们不在的地方连接的企业用户(我住在阿根廷,但我的工作互联网连接是通过我的员工是一家美国公司,所以每个网站都假设我位于美国)

于 2008-10-28T18:03:26.720 回答
0

处理 UTC 时间。

  • 让用户告诉您他们想使用哪个区域。
  • 如果您的用户具有持久配置文件,请坚持选择。
  • 始终并排显示 UTC 和本地时间并清楚标记。

您还可以显示任意数量的用户指定区域时钟。Vista 做到了这一点,我仍然对它的方便程度感到惊讶。

于 2008-10-31T02:06:18.633 回答