检测和存储Web应用程序客户端所在的时区的最佳方法是什么?

我有一个多时区Web应用程序,它将所有日期时间值以UTC格式存储在数据库中,当服务器上发生操作时,我可以轻松地将时间转换为UTC。

但是,当客户输入时间或时间跨度时,检测和存储它的最佳方法是什么?

我目前正在做以下事情:

  1. 获取Date.getTimezoneOffset()(javascript)的值
  2. 通过Page上的ICallbackEventHandler将其发布到服务器端代码。
  3. 将该值存储在会话中
  4. 在任何后续请求中,使用客户端的时区计算输出/输入日期时间值。

无论实际实现如何,这似乎都是一个优雅的解决方案。 有没有人有更好的方法?

我正在做一些非常相似的事情,但我现在认为我更喜欢使用javascript将所有时间转换为客户端本地。 服务器将在生成的页面中以UTC格式给出所有时间,并且一旦页面加载,javascript将转换它。

这消除了服务器端代码的混淆,因为我总是知道它是什么时间(UTC)。 在客户端,我使用jquery和each()函数一次格式化所有时间值。 我在隐藏字段中将每个时间写为unix时间,以便使用jquery轻松处理。

我用这种方法看到的唯一问题是a)我在javascript中没有真正好的日期/时间格式化例程,而b)如果用户关闭了javascript,那么它就不起作用了。

您可以使用HttpRequest对象的“header”属性来查询客户端发送的“If-Modified-Since”标头。 此标头应包含一个格式的日期,该格式包含客户端的时区,如下所示:

If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT 

简单的子字符串提取将为您提供时区代码。 但是,我担心并不是所有的浏览器在发送标题时都是一致的,所以你应该对它进行一些实验。

问候,法布里奇奥