【问题标题】:jQuery Date Picker - TimeZone IssuejQuery 日期选择器 - 时区问题
【发布时间】:2011-07-20 21:55:56
【问题描述】:
我们在我们的网站上使用 jQuery 日期选择器来选择预订的日期和时间。日历当前设置为 PST,当用户尝试从其他时区访问时,这会导致错误。我们是否应该将服务器设置为 UTC,并让应用程序根据用户的 IP 地址自动选择用户的时区。我很好奇我们是否还必须包括手动选择,因为自动选择可能会失败(即当用户通过代理工作时)。任何建议将不胜感激。
【问题讨论】:
标签:
jquery
date
timezone
jquery-ui-datepicker
【解决方案2】:
我大胆猜测前端根本不需要对时区有任何了解。
当他们从日期选择器中选择时间时,只需将其原样传回(如果他们选择了晚上 9 点,就传回晚上 9 点)。在服务器上,将该日期和时间转换为时间戳。
此时,您可以根据 IP 对用户的时区进行调整,也可以选择实施该方法。您可以在目标时间中增加或减少小时数以匹配用户的时区。
但是,这意味着您还需要在输出它们时重新解析时间,以确保它们按照应有的方式显示。因此,例如,如果您要存储 Unix 时间戳,请确保根据用户的位置打印出格式化的日期。
您绝对应该允许用户选择他们自己的时区来覆盖,但默认情况下您会这样做。
【解决方案3】:
如果只需要在网页界面显示时间:
- 使用 Date.getTime()/1000 将客户端上的时间计算为秒(Unix 时间);分别为 Date.setTime(utc_seconds*1000);请注意,Javascript 使用毫秒
- 以秒(Unix 时间)在客户端和服务器之间传输所有时间
- 将时间存储为 UTC 时间戳(您的后端可能支持转换为 UTC 时间戳)
如果您需要在服务器上以人类可读的时间做其他事情(例如发送包含会议时间的电子邮件):
警告:
- 无论何种机制,基于IP的位置检测都是不完善的;我不会将它用于时区检测
- 大多数非Windows系统使用tz database;如果您的后端是 Microsoft,您可能需要 convert 到 Windows 标准时区
- 虽然时区检测发展迅速,但也可能出现问题,因为某些司法管辖区会临时更改时区;
- 对于您的应用程序,如果您支持定期会议,我预测时区规则更改最痛苦;操作系统通常将其包含在服务包中
- 您可以考虑一种机制让用户手动设置时区(可能在自动检测之后)