【问题标题】:Display accurate local time on web site?在网站上显示准确的当地时间?
【发布时间】:2008-10-28 17:33:25
【问题描述】:

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

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

所以我可以得到显示的“正确”时间;

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

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

这是来自Jon Galloway on Atomic Clock Web Service 的一篇博文,它很老了,但当我用谷歌搜索时排名很高,他没有得出结论。

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

我缺少任何角度吗?

【问题讨论】:

  • 时钟的用途是什么?需要什么分辨率?秒?分钟?显示的是客户端本地时区吗?
  • 我个人在 UTC 上运行一切,尤其是在服务器上:如果您将时间发布为 13:47 UTC,则不会造成混淆。就此而言,eBay 的系统也不存在将 PT 用于所有事情的系统。

标签: javascript web-services timezone


【解决方案1】:

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

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

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

我不会担心时区,只需使用 UTC 时间,这样就不会混淆事情发生的时间。

【讨论】:

  • “在最坏的情况下不会超过几秒钟的网络延迟” - 在您的动作网络应用中,几秒钟真的可以接受吗?
  • 这并不理想,但任何网络应用程序都必须处理延迟问题。对于拍卖来说,重要的是我们要小心防止比赛条件或在服务器时钟关闭时间之后收到的帖子。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 奥斯卡以一种不明显的方式提出了一个重要的观点:某些时区存在非整数小时偏移。我认为它们都是 30 分钟的增量,除了一些非常精心制作的笑话。不过检查一下。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      以 UTC 处理时间。

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

      您还可以显示任意数量的用户指定区域时钟。远景 这样做,我仍然对如何 很方便。

      【讨论】:

        猜你喜欢
        • 2020-10-29
        • 2023-04-03
        • 2021-11-29
        • 2021-03-15
        • 2012-05-02
        • 1970-01-01
        • 2020-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多