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为时区。 这在移动设备上效果最好。