jQuery日期选择器 - 时区问题

6
我们的网站上使用了jQuery日期选择器来选择预订的日期和时间。当前,日历设置为PST时区,这会导致用户在其他时区尝试访问时出现错误。我们应该将服务器设置为UTC,并根据用户的IP地址自动选择用户的时区吗?我想知道是否还需要包括手动选择,因为自动选择可能会失败(例如当用户通过代理工作时)。非常感谢您的建议。
3个回答

7
用户已经选择了位于其操作系统设置中的时区。使用JavaScript检测此时区(不基于IP),并将其与日期选择器值一起传递到服务器端应用程序。您可以在JavaScript或服务器端将本地时间转换为UTC时间,以您喜欢的任何一种方式。但是保持服务器端应用程序在UTC上是一个好习惯,并且在内部某些语言中也是这样使用的,例如Java中的java.util.Date

2
我想猜测,前端根本不需要了解时区。
当他们从日期选择器中选择时间时,只需按原样传回(如果他们选择了晚上9点,则只需传回晚上9点)。在服务器上,将该日期和时间转换为时间戳。
此时,您可以根据IP地址或其他方式实现,根据用户的时区进行调整。您只需添加或减去小时数以匹配用户的时区。
但是,这意味着您还需要重新解析输出时间,以确保它们显示出应有的样子。例如,如果您存储Unix时间戳,请确保基于用户所在地打印格式化日期。
您应该肯定允许用户选择自己的时区来覆盖默认设置。

1

如果您只需要在 Web 界面上显示时间:

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

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

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

警告:

无论采用何种机制,基于IP的位置检测都不是完美的;我不会将其用于时区检测。
大多数非Windows系统使用tz数据库;如果您的后端是Microsoft,您可能需要转换为Windows标准时区。
尽管时区检测很好,但有些司法管辖区会临时更改时区,事情可能会出错;
对于您的应用程序,如果支持重复会议,则预测最痛苦的是时区规则更改;操作系统通常在服务包中包含此功能。
您可以考虑为用户手动设置时区的机制(可能是在自动检测后)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接