JavaScript时区信息如何获得美洲/ Los_Angeles(或同等学历)
林不知道是否有一个内置的function,在JavaScript的时区信息,如
美国/洛杉矶(或同等),可以决定它需要考虑的因素?
类似于http://momentjs.com/timezone/在它的主页上呢? 还是有这些区域的列表,我可以尝试build立自己的图书馆? 从我收集http://momentjs.com/timezone/以美国/ Los_Angeles为例来确定一个抵消,但我找不到任何提及如何做相反。
JavaScript中的时区检测不完善。 您可以使用Date
对象的实例上的getTimezoneOffset
获取特定date和时间的本地时区偏移量 ,但与America/Los_Angeles
等完整的IANA时区并不完全相同。
虽然有一些select:
-
Chrome和Opera的最新版本在实施ECMAScript国际化API时支持IANA时区。 在这些特定的浏览器中,你可以这样做:
Intl.DateTimeFormat().resolvedOptions().timeZone
结果是包含本地计算机的IANA时区的string。 但是,这是有点新的,并没有在所有的浏览器中实现 。
另外,为了使这项工作在Windows上进行,Chrome必须依靠ICU4C将本地计算机的Windows时区ID转换为IANA时区ID,并使用Unicode CLDR补充映射 。
所以,我认为这是一个长期的决议。 这还没准备好。
-
同时,您可以使用jsTimezoneDetect库在时区进行有根据的猜测 。 它通过在几个不同的点询问
getTimezoneOffset
并使用结果来select适当的时区。Moment.js现在在时区扩展中也有这个function,如
moment.tz.guess()
。 它比jsTimezoneDetect有一个更健壮的实现。但是,这最终是一个猜测。 它会在很多情况下工作,但不是全部。 此外,它必须定期更新,以抵消这样一个事实,即大多数JavaScript实现只知道当地夏令时规则的本地时区。 在这里的更多细节。
最终,你应该问你的用户他们的时区。 提供可以更改的设置。 您可以使用上述选项之一来select默认设置,但不要让它不可能偏离您的应用程序。
还有完全不同的方法,完全不依赖于用户计算机的时区设置。 相反,如果您可以收集经度和纬度坐标,则可以使用这些方法之一将这些坐标parsing为时区。 这在移动设备上效果最好。