获得客户';s时区,而不使用正常的JavaScript函数';getTimezoneOffset';?

获得客户';s时区,而不使用正常的JavaScript函数';getTimezoneOffset';?,javascript,c#,timezone,client-server,timezone-offset,Javascript,C#,Timezone,Client Server,Timezone Offset,我目前正在一个网站上做注册表格,我需要知道如何准确地获取活动用户客户端的时区偏移量,以计算其实际本地时间(不需要DST) 我尝试了使用函数getTimeZoneOffset()的JS方法,但似乎不太推荐,因为它依赖于用户时间设置。 (我在我的机器上更改了时钟时间并尝试了一下) 因此,用户时间设置的任何更改都将改变时区偏移 我是否可以实现任何其他“可靠”和“可靠”的方法来获取时区偏移量,然后将其应用到我的C#代码中 最好。这里有很多问题需要解决,所以我将逐一回答您的问题: 。。。我需要确切地知道如

我目前正在一个网站上做注册表格,我需要知道如何准确地获取活动用户客户端的时区偏移量,以计算其实际本地时间(不需要DST)

我尝试了使用函数getTimeZoneOffset()的JS方法,但似乎不太推荐,因为它依赖于用户时间设置。 (我在我的机器上更改了时钟时间并尝试了一下)

因此,用户时间设置的任何更改都将改变时区偏移

我是否可以实现任何其他“可靠”和“可靠”的方法来获取时区偏移量,然后将其应用到我的C#代码中


最好。

这里有很多问题需要解决,所以我将逐一回答您的问题:

。。。我需要确切地知道如何获得活动用户的时区偏移

您无法获得时区偏移,只能获得时区偏移。也就是说,您获得的时区偏移仅针对单个时间点。由于标准时间和夏令时的变化,时区会经历过渡。在JavaScript
Date
对象上调用
getTimeZoneOffset
时,该
Date
对象表示特定的时间点(默认情况下为“现在”)。因此,返回的偏移量是针对该特定时间点的。不能保证以前的时间点或将来的时间点将使用相同的偏移量。只有当您将偏移量与特定的时间戳(例如使用DateTimeOffset模式记录活动)配对时,才可以将偏移量发送到服务器

另请阅读的“时区!=偏移量”部分

。。。要计算他的实际当地时间

你不需要计算<代码>新日期()。toString()将为您提供用户的实际本地时间。如果需要特定格式的输出,可以使用、等库,也可以使用函数

。。。(不需要DST)

人们经常这样说,因为他们认为这可以消除复杂性,但事实是-这不取决于你。DST是否适用(以及何时适用)取决于监管特定时区的当地政府机构。如果DST适用于用户所在时间的本地时间,并且您决定不考虑这一点,那么您的结果将被取消一小时(通常)

幸运的是,所有的辛苦工作都已经为你完成了。许多人努力工作以确保数据的准确性。消耗他们的努力比试图绕过他们更容易

此外,即使你认为你不关心夏令时,也要考虑到很多时区都有标准时间的变化。

getTimeZoneOffset()
但似乎不太推荐它,因为它依赖于用户时间设置

它依赖于用户时间设置不是问题。不推荐它的一般原因是因为我已经描述过的“时区!=偏移量”问题。如果您想知道用户的时区,您需要一个时区标识符,如
“America/Los_Angeles”
,而不是偏移量
480

。。。因此,用户时间设置的任何更改都将改变时区偏移

用户可以控制自己的计算机,并且可以将时区设置为任何他们想要的。通常人们将时区设置为当地时间,这样他们看到的时钟是正确的。人们使用其他时区并非闻所未闻,例如,如果他们在海外工作,并希望将他们的工作日与母公司的当地时间保持一致(尽管我个人认为这令人憎恶)。无论如何,这不是你可以合理预期控制的事情

。。。我是否可以实现任何其他“可靠”和“可靠”的方法来获取时区偏移量,然后将其应用到我的C#代码中

如果您想要用户的本地时区,那么

但是,我不确定你认为“稳健可信”的标准是什么。上述方法没有什么特别不可信的地方


你可以考虑的一件事是,如果你实际上不希望用户的本地时区,而是在特定位置的本地时间。虽然这些看起来是一样的,但它们并不总是一样的。您可以使用导出位置的本地时区标识符。

我想您可以在这里找到问题的答案