使用moment.js(使用moment-timezone),我想获取当前语言环境的时区缩写(例如PST).
var now = Date.now(); // 1423254073931 var zone = moment(now).zone(); // 480 var timezone =
如何获取时区缩写?我在文档和其他地方看到的所有例子都选择了一个特定的区域,如“America / New_York”.
从文档中,我可以使用zone.abbr(timestamp)从Zone Object获取信息,但我不知道如何访问区域对象.
解决方法
标题和问题是不同的.在标题中,你会问如何使用偏移量来取得它 – 这是不可能的.有许多时区共享相同的偏移量,因此不可能单独区分时区缩写和偏移.
但是在这个问题中,您询问了如何获取当前语言环境的缩写,具体时间戳.
一般的问题是没有完全可靠的方式来检测当前的时区.这在this answer中讨论.所以moment-timezone不能确定地告诉哪个时区默认加载.
还有一些其他选项可用.
>在某些浏览器中,Date对象的toLocaleString
功能支持ECMAScript Internationalization API扩展.支持时,您可以做到这一点(没有时刻):
var d = new Date(); // or whatever date you have var tzName = d.toLocaleString('en',{timeZoneName:'short'}).split(' ').pop();
在受支持的浏览器中,您将获得像“EST”这样的值.您可能想要进行某种测试,因为它不会在所有浏览器中运行.
>您可以使用像jsTimeZoneDetect这样的脚本来猜测当地的时区.这通常是正确的,但不能保证.然后,您可以将该值传递给时区.
var tzName = jstz.determine().name(); var m = moment(); var abbr = m.tz(tzName).zoneAbbr(); // or .format('z')
>现在还在moment-timezone内置支持时区检测/猜测:
var tzName = moment.tz.guess(); var abbr = m.tz(tzName).zoneAbbr(); // or .format('z')