在此处查看本教程http://pellepim.bitbucket.org/jstz/,了解使用javaScript检测设备时区设置的自动时区检测。
我想知道这个方法检测时区的准确程度是否有任何人(棒球场很好)?
感谢您的时间!
答案 0 :(得分:3)
来自the project page的“限制”部分:
此脚本不执行地理位置,也不关心历史时区。
因此,当用户实际上在“欧洲/斯德哥尔摩”时,如果您对“欧洲/柏林”时区不满意 - 此脚本不适合您。 (它们在现代都是相同的。)
此外,如果您知道在欧洲/ Simferopool(乌克兰),1924年之前的UTC偏移为+2.67,这很重要,抱歉,这个脚本对您没有帮助。
一般来说,时区是一个搞砸的事情,这个脚本的范围是解决现代时区的问题,在这种情况下从2010年开始。
您可以看到the project's issue tracker中检测不完善的几个问题。
从设计角度来看,它试图通过使用getTimezoneOffset()
在不同时间点读取几个读数并将它们与已知值进行比较来做正确的事情。
最大的问题是JavaScript lies。它的API会让您认为可以检查任何日期/时间的本地偏移量。但实际上,它只知道时区的当前规则。由于不同的时区在不同的时间点发生变化,因此除非您专门检查“现在”,否则很难知道您是否正在使用“当前”时区规则。这是在issue #68中提出的,但决定超出范围。
另外请注意,如果您仅测试当前规则,则通常会有几个不同的时区重叠。请参阅issue #74和issue #64。
随着时区规则的变化,必须释放新版本的jstzDetect以进行补偿。使用它的应用程序也必须计划更新。到目前为止,还没有很多更新。
不幸的是,没有完美的方法来检测用户的时区。一些浏览器开始支持以下内置机制:
Intl.DateTimeFormat().resolvedOptions().timeZone
但它尚未被广泛采用,不幸的是there are bugs there too。
我能提供的最佳建议是使用jstzDetect作为起点。它擅长对应用程序中的其他时区选择控件进行初步猜测。如果您关心准确性,请不要使用它。
答案 1 :(得分:0)
我不能说这个特定的库(jsTimezoneDetect)有多精确,但假设该库使用原生的«Date().getTimezoneOffset()»方法并且只是有一个查找表来返回对应的时区...并且查找表是正确的,那么这将是一种非常强大的方法。
时区偏移是UTC和之间的差异,以分钟为单位 当地时间。