我有一个Web应用程序,记录客户端执行的所有活动与用户ID和时间。截至目前,应用程序记录了数据库服务器的时间。我的应用程序支持不同的时区,因此我想捕获调用事件的客户机时间,并将该时间存储在db而不是db服务器时区中。表 列的记录时间在客户端与客户端时区
结构:用户ID,事件ID,时间(此值必须在客户端机器的时间,而不是数据库服务器值)
我的问题是如何获取到记录客户端计算机时区而不是dbserver时区。
我希望我足够清楚。 在此先感谢
我有一个Web应用程序,记录客户端执行的所有活动与用户ID和时间。截至目前,应用程序记录了数据库服务器的时间。我的应用程序支持不同的时区,因此我想捕获调用事件的客户机时间,并将该时间存储在db而不是db服务器时区中。表 列的记录时间在客户端与客户端时区
结构:用户ID,事件ID,时间(此值必须在客户端机器的时间,而不是数据库服务器值)
我的问题是如何获取到记录客户端计算机时区而不是dbserver时区。
我希望我足够清楚。 在此先感谢
您的问题在于获取客户端浏览器的时区,但不幸的是没有一个这样做的万无一失的方法。有多种选择,但:
一询问用户
当你的“用户首选项”部分中的一部分,你给用户一个选项来设置他们的首选时区。
二,猜一猜
使用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?
希望这有助于。
在数据库端,您希望使用TIMESTAMP WITH TIMEZONE数据类型。
显然这使得一些查询更复杂。例如,如果您想提取星期六的记录,那么您的意思是星期六,如启动插入的用户所看到的,或者是星期六,如查询人或星期六所看到的,从数据库的角度来看(或其他“公正”的观点)。
我修改了问题 – user428747 2010-12-19 20:39:07
你的客户是什么?浏览器? C#应用程序? – Oded 2010-12-19 20:41:24
这个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