使用偏移值获取时区缩写

IT技术 javascript timezone momentjs
2021-03-12 20:33:01

使用moment.js(带有moment-timezone),我想获取当前语言环境的时区缩写(例如PST)。

var now = Date.now(); // 1423254073931
var zone = moment(now).zone(); // 480
var timezone = 

我如何获得时区缩写?我在文档和其他地方看到的所有示例都选择了一个特定的区域,例如"America/New_York".

从文档中,看起来我可以从Zone 对象中获取信息zone.abbr(timestamp)但我不确定如何访问 zone 对象。

JSFiddle

2个回答

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

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

一般的问题是,没有完全可靠的方法来检测当前时区。这在这个答案中讨论因此,moment-timezone 无法确定性地判断默认情况下应加载哪个时区。

不过,还有一些其他选项可用。

当前浏览器/节点

在当前的浏览器中,对象功能支持ECMAScript 国际化 API扩展如果支持,您可以执行以下操作:toLocaleStringDate

    var d = new Date(); // or whatever date you have
    var tzName = d.toLocaleString('en', {timeZoneName:'short'}).split(' ').pop();

在当前的浏览器中,您将获得类似“EST”的值。不过,您可能想要进行某种测试,因为它不适用于所有浏览器。

使用 jsTimeZoneDetect

您可以使用像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')
很高兴知道这一点。我之前认为 offset 是唯一的,所以它可以用来获取时区。
2021-04-20 20:33:01
最新版本的 moment-timezone 还包含时区猜测。
2021-04-29 20:33:01

最新版本的 moment.js 会给你时区猜测: 例如PR#220moment.tz.guess(); will result in 'America/New_York'