即使系统设置不正确,如何在JavaScript中找到正确的时区?

即使系统设置不正确,如何在JavaScript中找到正确的时区?,javascript,timezone,Javascript,Timezone,我正在构建一个时间敏感的web应用程序,用户在其中以本地时间输入与时间相关的数据,并以UTC格式保存在数据库中。到目前为止,该应用程序使用浏览器提供的时区,我假设它使用操作系统提供的时区。当计算机所有者手动设置系统时区时,可能会出现问题,并且可能是错误的。一个潜在的解决方案是从互联网上获得正确的时区。但我不希望每次需要时调用API来确定正确的时区设置,除非没有其他选择。有人能提出一个正确的方法来解决这个问题吗?我不知道你想捕获什么时间,但是如果用户要对你的应用程序采取行动,你可以在0开始一个JS

我正在构建一个时间敏感的web应用程序,用户在其中以本地时间输入与时间相关的数据,并以UTC格式保存在数据库中。到目前为止,该应用程序使用浏览器提供的时区,我假设它使用操作系统提供的时区。当计算机所有者手动设置系统时区时,可能会出现问题,并且可能是错误的。一个潜在的解决方案是从互联网上获得正确的时区。但我不希望每次需要时调用API来确定正确的时区设置,除非没有其他选择。有人能提出一个正确的方法来解决这个问题吗?

我不知道你想捕获什么时间,但是如果用户要对你的应用程序采取行动,你可以在0开始一个JS计时器,然后代替固定的时间戳,你存储从零开始的偏移量,将所有这些时间连同捕获的总秒数一起提交给你的应用程序

从这一点上,您可以反向工程从服务器时间到发生事情时的训练的偏移量,并使用客户端的本地时区设置将其转换到正确的时区

例如,如果他们在1秒、60秒和120秒执行操作,并且应用程序上的总时间为200秒,则您可以执行以下操作:

first action is current_timestamp - 200s + 1s
second action is current_timestamp - 200s + 60s
third action is current_timestamp - 200s + 120s

这将为您提供正确的时间戳,以便您可以随心所欲地交换时区。

您最终无法判断对客户来说什么应该是正确的,因为您认为您所知道的关于客户的一切都来自客户。就让他们使用他们想要的任何时区。就像波蒂说的:没有API可以对系统配置进行二次猜测。@charlietfl这可能会更好,但当然客户端可能会有一个时钟意外地或故意地失控。@charlietfl-是的,通常主机之间应该使用UTC。但是,如果用户设置的时区不正确。。。那么UTC时间可能也会减少这个数量。这是一个好主意,但它并不能解决这个特殊问题。服务器当然知道HTTP请求何时到达。还值得注意的是,来自客户端的数据应始终被视为是他们自己编造的,因此添加合理的检查,以确保您不会完全信任所发生的事情。也就是说,如果某个东西运行了“10年”,但你的应用程序只运行了24小时,这是可疑的。这对确定时区有什么帮助?时区与偏移不同。查看时区!=@MattJohnson中的偏移量我想您可能误解了我在这里使用偏移量的方式,偏移量与时区无关,因此您可以根据UNIX时间戳将操作放置在绝对时间点上。只有这样做之后,才能查找本地时区代码并将unix时间戳转换为本地时间。好的,但这不是原始问题的目的。@MattJohnson我不同意,如果你读了整个问题,你会发现它的结尾是:有人能提出一个正确的方法来解决这个问题吗?这并不局限于JS,如果问题是我只想使用JS,那么答案会很好,你无法可靠地实现这一点。