代码之家  ›  专栏  ›  技术社区  ›  Dave Anderson

在网站上显示准确的本地时间?

  •  6
  • Dave Anderson  · 技术社区  · 16 年前

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

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

    所以为了得到正确的时间,我可以;

    • 使用本地PC时间并将新日期()传递给javascript时钟对象。优点:应该尽可能靠近电脑时钟。缺点:不确定PC时钟有多精确,更不用说在哪个时区了。
    • 使用Web服务向NTP服务器发送TCP请求以更新网页上的时钟。优点:如果本地PC也同步到NTP,将是准确和最好的匹配。缺点:必须处理与服务器相关的所有时区调整。如果PC时钟不在,则仍会有不匹配。

    我是实现自己的Web服务,还是使用类似的东西; Earth Tools 或World Time Web服务( 编辑: 链接已删除-现在为404)

    这是一篇来自 Jon Galloway on Atomic Clock Web Service 这是相当古老,但排名很高,当我谷歌和他没有得出结论。

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

    我找不到任何角度?

    5 回复  |  直到 15 年前
        1
  •  2
  •   Sal    16 年前

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

    在那之后,你就快到准确的时间了。只要你的javascript计时器代码写得正确,在下一页加载之前你就不会失去同步。但我见过很多坏的JS时钟代码。(提示:date()好,setTimeout()坏。)

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

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

        2
  •  1
  •   Illandril    16 年前

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

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

        3
  •  0
  •   Oscar Cabrero    16 年前

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

        4
  •  0
  •   Ricardo Reyes    16 年前

    另一种方法是使用 IP Geolocation . 有一些服务可以根据用户的IP(通常包括其时区)告诉您用户从何处连接,并将这些信息与服务器的实时时钟结合起来,您可以向用户显示本地时间。

    这还远远不够完美,尤其是与公司用户的联系,他们似乎不是来自某个地方(我住在阿根廷,但我的工作互联网连接是通过我的美国公司的雇员实现的,所以每个网站都假设我位于美国)。

        5
  •  0
  •   Peter Wone    16 年前

    以UTC格式处理时间。

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

    您还可以显示任意数量的用户指定的区域时钟。远景 我和这个人对 很方便。