Javascript 使用偏移量值获取时区缩写

Javascript 使用偏移量值获取时区缩写,javascript,timezone,momentjs,Javascript,Timezone,Momentjs,使用矩.js(带有矩时区),我想获得当前语言环境的时区缩写(例如PST) var now = Date.now(); // 1423254073931 var zone = moment(now).zone(); // 480 var timezone = 如何获得时区缩写?我在文档和其他地方看到的所有示例都选择了一个特定区域,如“美国/纽约” 从文档中,我似乎可以通过zone.abbr(timestamp)从中获取信息,但我不确定如何访问zone对象 标题和问题不同。在标题中,您询问如何使

使用矩.js(带有矩时区),我想获得当前语言环境的时区缩写(例如PST)

var now = Date.now(); // 1423254073931
var zone = moment(now).zone(); // 480
var timezone = 
如何获得时区缩写?我在文档和其他地方看到的所有示例都选择了一个特定区域,如
“美国/纽约”

从文档中,我似乎可以通过
zone.abbr(timestamp)
从中获取信息,但我不确定如何访问zone对象


标题和问题不同。在标题中,您询问如何使用偏移量获取它-这是不可能的。有许多时区共享相同的偏移量,因此无法单独区分时区缩写和偏移量

但在问题中,您询问了如何获取当前语言环境的缩写,即特定的时间戳

一般的问题是,没有完全可靠的方法来检测当前时区。这将在中讨论。所以矩时区不能确定地告诉默认情况下应该加载哪个时区

不过,还有其他一些选择

当前浏览器/节点 在当前浏览器中,
Date
对象的函数支持扩展。支持时,您可以执行以下操作:

    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.js会让您猜测时区:
例如:
moment.tz.guess();将导致“美国/纽约”

,并且您不能使用
/\([^)]+)\/.exec(New Date())[1]
?@RobRaisch我认为这在跨浏览器中不起作用。例如,这是Firefox中
new Date
的结果:
2015-02-06T23:40:57.085Z
实际上,
new Date()
的结果是日期对象的新实例,FF以非标准格式打印到控制台。因此,您可以使用
/\([^)]+)\/.exec((new Date()).toString())[1]
而不是上面的代码,它在波士顿返回“东部标准时间”。我的错误是,我发现使用
toString
,Chrome和Firefox中的日期看起来是一样的。但即使有了这个修正,我仍然在不同浏览器之间存在不一致性(一些人说EST,而另一些人说东部标准时间)。这就是为什么我希望使用moment.js,因为它可以跨各种浏览器规范化许多内容。是的,这是一个好主意,但是字符串格式的日期对象的输出完全是特定于实现的。ES5规范不保证任何特定的结果,在实践中,您会发现浏览器在不同版本和操作系统之间会有不同的结果。这一点很好。我以前认为偏移量是唯一的,所以它可以用来获取时区。最新版本的矩时区也包含时区猜测。
    var tzName = moment.tz.guess();
    var abbr = m.tz(tzName).zoneAbbr();  // or .format('z')