【问题标题】:jQuery Date Picker - TimeZone IssuejQuery 日期选择器 - 时区问题
【发布时间】:2011-07-20 21:55:56
【问题描述】:

我们在我们的网站上使用 jQuery 日期选择器来选择预订的日期和时间。日历当前设置为 PST,当用户尝试从其他时区访问时,这会导致错误。我们是否应该将服务器设置为 UTC,并让应用程序根据用户的 IP 地址自动选择用户的时区。我很好奇我们是否还必须包括手动选择,因为自动选择可能会失败(即当用户通过代理工作时)。任何建议将不胜感激。

【问题讨论】:

    标签: jquery date timezone jquery-ui-datepicker


    【解决方案1】:

    用户已经在他们的操作系统设置中选择了他们的时区。 Use javascript to detect this timezone (not based on IP),并将其与日期选择器值一起传递给服务器端应用程序。您可以在 Javascript 或服务器端将本地时间转换为 UTC 时间,无论您喜欢哪个。但是将服务器端应用程序保持在 UTC,因为这是一种很好的做法,并且在内部这是某些语言使用的,例如,java.util.Date 在 Java 中。

    【讨论】:

      【解决方案2】:

      我大胆猜测前端根本不需要对时区有任何了解。

      当他们从日期选择器中选择时间时,只需将其原样传回(如果他们选择了晚上 9 点,就传回晚上 9 点)。在服务器上,将该日期和时间转换为时间戳。

      此时,您可以根据 IP 对用户的时区进行调整,也可以选择实施该方法。您可以在目标时间中增加或减少小时数以匹配用户的时区。

      但是,这意味着您还需要在输出它们时重新解析时间,以确保它们按照应有的方式显示。因此,例如,如果您要存储 Unix 时间戳,请确保根据用户的位置打印出格式化的日期。

      您绝对应该允许用户选择他们自己的时区来覆盖,但默认情况下您会这样做。

      【讨论】:

        【解决方案3】:

        如果只需要在网页界面显示时间:

        • 使用 Date.getTime()/1000 将客户端上的时间计算为秒(Unix 时间);分别为 Date.setTime(utc_seconds*1000);请注意,Javascript 使用毫秒
        • 以秒(Unix 时间)在客户端和服务器之间传输所有时间
        • 将时间存储为 UTC 时间戳(您的后端可能支持转换为 UTC 时间戳)

        如果您需要在服务器上以人类可读的时间做其他事情(例如发送包含会议时间的电子邮件):

        • 在客户端捕获时区(例如使用jsTimezoneDetect)并将其保存在服务器上
        • 使用捕获的时区为用户进行服务器端计算

        警告:

        • 无论何种机制,基于IP的位置检测都是不完善的;我不会将它用于时区检测
        • 大多数非Windows系统使用tz database;如果您的后端是 Microsoft,您可能需要 convert 到 Windows 标准时区
        • 虽然时区检测发展迅速,但也可能出现问题,因为某些司法管辖区会临时更改时区;
        • 对于您的应用程序,如果您支持定期会议,我预测时区规则更改最痛苦;操作系统通常将其包含在服务包中
        • 您可以考虑一种机制让用户手动设置时区(可能在自动检测之后)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-28
          • 2016-10-15
          • 1970-01-01
          • 1970-01-01
          • 2016-12-30
          • 2013-09-30
          相关资源
          最近更新 更多