jQuery日期选择器 - TimeZone问题

时间:2011-03-22 23:03:06

标签: jquery date timezone jquery-ui-datepicker

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

我冒昧地猜测前端根本不需要对时区有任何了解。

当他们从日期选择器中选择一个时间时,只需将其按原样传回(如果他们选择了晚上9点,则只返回晚上9点)。在服务器上,转换该日期&到时间戳的时间。

此时,您可以根据IP对用户的时区进行调整,或者您选择实施该时区。您可以在目标时间内添加或减去小时数以匹配用户的时区。

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

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

答案 2 :(得分:1)

如果您只需要在网络界面中显示时间:

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

如果您需要在人工可读时间内在服务器上执行其他操作(例如,发送包含会议时间的电子邮件):

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

警告:

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