2010-12-19 157 views
0

我有一个Web应用程序,记录客户端执行的所有活动与用户ID和时间。截至目前,应用程序记录了数据库服务器的时间。我的应用程序支持不同的时区,因此我想捕获调用事件的客户机时间,并将该时间存储在db而不是db服务器时区中。表 列的记录时间在客户端与客户端时区

结构:用户ID,事件ID,时间(此值必须在客户端机器的时间,而不是数据库服务器值)

我的问题是如何获取到记录客户端计算机时区而不是dbserver时区。

我希望我足够清楚。 在此先感谢

+0

我修改了问题 – user428747 2010-12-19 20:39:07

+0

你的客户是什么?浏览器? C#应用程序? – Oded 2010-12-19 20:41:24

+0

这个SO问题提出了一些方法:http://stackoverflow.com/questions/630321/how-do-you-retrieve-the-client-users-time-zone-for-a-web-application – 2010-12-19 20:46:41

回答

1

您的问题在于获取客户端浏览器的时区,但不幸的是没有一个这样做的万无一失的方法。有多种选择,但:

一询问用户

当你的“用户首选项”部分中的一部分,你给用户一个选项来设置他们的首选时区。

二,猜一猜

使用HTTP_ACCEPT_LANGUAGE标头,您可以推断一个国家。显然,如果设置只是“en”或“fr”或“es”,那么你的猜测就是这样,如果还有国家偏好的话,例如, “en-US”或“en-GB”或“fr-FR”,那么你的猜测会更接近。您仍然需要一个“用户首选项”框来处理边缘情况。

三,使用Javascript

Javascript有一个getTimezoneOffset()函数,它将为您提供客户端浏览器的GMT偏移量。下面显示使用该函数的例子:

How can I obtain the local time in jQuery?

希望这有助于。

2

在数据库端,您希望使用TIMESTAMP WITH TIMEZONE数据类型。

显然这使得一些查询更复杂。例如,如果您想提取星期六的记录,那么您的意思是星期六,如启动插入的用户所看到的,或者是星期六,如查询人或星期六所看到的,从数据库的角度来看(或其他“公正”的观点)。