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

时间:2008-10-07 18:50:56

标签: c# javascript timezone

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

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

我目前正在做以下事情:

  1. 获取Date.getTimezoneOffset()(javascript)
  2. 的值
  3. 通过Page。上的ICallbackEventHandler将其发布到服务器端代码。
  4. 将该值存储在会话中
  5. 在任何后续请求中,使用客户端的时区计算输出/输入日期时间值。
  6. 无论实际实施如何,这似乎都是一个优雅的解决方案。有没有人有更好的方法?

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

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

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

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

的问候, 的Fabrizio