2

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

所以,我可以使用TimeZoneInfo.FindSystemTimeZoneById(TimeZoneName)功能。

我试过new Date().getTimezoneOffset()参考

但是,此代码中的夏令时存在问题。

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

但是,这会在不同的浏览器中产生不同的格式。

在 Firefox、chrome 和 safari 中,答案是“2012 年 5 月 8 日星期二 14:00:00 GMT+0530(印度标准时间)”

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

歌剧也有类似的问题。

因此,此方法不适用于 IE 和 Opera。

识别客户时区的最佳方法是什么?

4

3 回答 3

3

最好和最常用的方法是使用客户端的 ip 通过一些 3rd 方库和数据库来识别客户端位置.. 然后根据客户端的位置确定时区

于 2012-05-08T08:56:47.757 回答
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 一样。

于 2012-05-08T10:04:38.940 回答
0

有一个通过 JavaScript 检测时区的库。它会给你一个足够好的时区的名称。它不进行地理定位或 ip-lookup,因此速度非常快,但不是非常精确。例如,它将为中欧时区的任何人返回“Europe/Berlin”。但是,它对于服务器端日期时间规范化应该足够好。

https://bitbucket.org/pellepim/jstimezonedetect

于 2012-05-08T12:59:33.383 回答