如何在ASP.Net MVC应用程序中获取客户端TimeZone

时间:2012-05-08 08:49:13

标签: javascript asp.net-mvc-3 timezone asp.net-4.0

我想在ASP.Net MVC应用程序中使用客户端时区名称(例如印度标准时间)。

所以,我可以使用TimeZoneInfo.FindSystemTimeZoneById(TimeZoneName)函数。

我尝试过new Date().getTimezoneOffset()reference

但是,本守则中的夏令时存在问题。

在javascript中,我也试过了new Date().toString()

但是,这会以不同的浏览器格式提供不同的格式。

在firefox,chrome&苹果浏览器, 答案是“Tue May 08 2012 14:00:00 GMT + 0530(印度标准时间)”

在IE8中,它是“Tue May 8 14:00:00 UTC + 0530 2012”

歌剧也有类似的问题。

因此,此方法不适用于IE&戏。

识别客户端TimeZone的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

最好和最常用的方法是通过客户端的ip来识别客户位置通过某些第三方库和数据库...然后根据客户的位置决定时区

答案 1 :(得分:3)

您是否需要知道时区或仅与UTC的偏移量?由于时区不是ISO标准,几乎可以随意更改,我更喜欢使用客户端与UTC的偏移量,我总是在登录时从客户端获取它,或者每当他们提交我需要客户端时间的表单时。有时我会计算出客户端的GTM偏移量并坚持使用它在我显示或使用时间的任何地方。

所以我有一个像这样的全局JavaScript函数,它将给定的本地日期作为通用字符串返回:

    function aspClientDateTime(dateObject) {
    return dateObject.getFullYear() + '-'
        + this.leadingZero((dateObject.getMonth() + 1), 2) + '-'
        + this.leadingZero(dateObject.getDate(), 2) + ' '
        + this.leadingZero(dateObject.getHours(), 2) + ':'
        + this.leadingZero(dateObject.getMinutes(), 2) + ':'
        + this.leadingZero(dateObject.getSeconds(), 2);
    }

在表单提交上,我获取当前的客户日期并将其存储在以下格式中:

myForm.clientTime.val(aspClientDateTime(new Date()));

然后你知道它在浏览器中的时间,你可以在服务器上计算UTC偏移等。

时区的问题在于,任何政府明天都会推出新的政府,就像萨摩亚最近所做的那样。通常,我想知道用户现在的偏移量,而不是他们所在的时区。

如果是真正需要的后者,你可能不得不像Skype那样问他们。

答案 2 :(得分:0)

有一个用于通过JavaScript检测时区的库。它会给你一个足够好的时区的名字。它不进行地理定位或ip查找,所以速度非常快,但并不是非常精确。例如,它将为中欧时区的任何人返回“欧洲/柏林”。但是,对于服务器端日期时间标准化来说应该足够了。

https://bitbucket.org/pellepim/jstimezonedetect