Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在ASP.NETMVC应用程序中获取客户端时区_Javascript_Asp.net Mvc 3_Timezone_Asp.net 4.0 - Fatal编程技术网

Javascript 如何在ASP.NETMVC应用程序中获取客户端时区

Javascript 如何在ASP.NETMVC应用程序中获取客户端时区,javascript,asp.net-mvc-3,timezone,asp.net-4.0,Javascript,Asp.net Mvc 3,Timezone,Asp.net 4.0,我想要ASP.NETMVC应用程序中的客户端时区名称(例如印度标准时间) 因此,我可以使用TimeZoneInfo.findsystemtimezonebyd(TimeZoneName)函数 我已尝试使用新日期()。getTimezoneOffset()() 但是,该代码中的夏令时存在问题 在javascript中,我还尝试了newdate().toString() 但是,这会在不同的浏览器中以不同的格式给出结果 在firefox、chrome和safari中, 答案是“2012年5月8日星期二

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

因此,我可以使用
TimeZoneInfo.findsystemtimezonebyd(TimeZoneName)
函数

我已尝试使用
新日期()。getTimezoneOffset()
()

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

在javascript中,我还尝试了
newdate().toString()

但是,这会在不同的浏览器中以不同的格式给出结果

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

在IE8中,是“2012年5月8日星期二14:00:00 UTC+0530”

歌剧也有类似的问题

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


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

最佳和最常用的方法是通过使用客户端ip的第三方库和数据库识别客户端位置。。然后根据客户端的位置决定时区,您需要知道时区还是只需要知道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那样。

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


我不想要客户端时间,我想要客户端时区。正如我前面提到的,由于夏令时,时间偏移不合适。我想说的是时区不可靠。如果您按照Jon Nylander建议的库的链接,它会这样说:“如果您正在寻找历史相关和/或地理精确的时区。jsTimezoneDetect不适合您。此脚本不进行地理定位。它只是从几个相同的时区(现代)中选择人口最多的时区。例如,无法区分中欧的不同时区。此脚本将返回欧洲/柏林,无论您居住在中欧时区的何处。“现在,您可以通过捕获客户端时间并使用C#TimeZoneInfo类选择与客户端时间偏移匹配的时区来完成该脚本所做的工作,但您仍然在猜测。这就是为什么我说,如果你需要明确知道他们的时区,你应该问他们。不过,如果有人提出更好的解决方案,我会很感兴趣。此外,您可以使用navigator.geolocation.getCurrentPosition获取他们的地理位置(尽管这本身不可靠),您可以将其与他们已知的时间偏移相结合,但这都不可靠。另一件事你必须考虑的是,人们(尤其是国际贸易商)喜欢在不同的时区工作。因此,如果可能的话,请用户选择一个时区。这不是完全有帮助的,对印度和斯里兰卡来说,它将显示“亚洲/加尔各答”,但我想要两个不同的结果,这取决于您想要解决的问题。如果您想跨时区进行日期时间计算,这将非常有用。因为斯里兰卡和印度有相同的时区。如果您正在寻找地理位置更精确的时区标识符,则需要使用地理位置和/或IP查找,这两者都不是完全可靠的。