使用偏移值获取时区缩写
IT技术
javascript
timezone
momentjs
2021-03-12 20:33:01
2个回答
题目和题目不一样。在标题中,您询问如何使用偏移量来获取它 - 这是不可能的。有许多时区共享相同的偏移量,因此无法将时区缩写与单独的偏移量区分开来。
但是在问题中,您询问了如何获取特定时间戳的当前语言环境的缩写。
一般的问题是,没有完全可靠的方法来检测当前时区。这在这个答案中讨论。因此,moment-timezone 无法确定性地判断默认情况下应加载哪个时区。
不过,还有一些其他选项可用。
当前浏览器/节点
在当前的浏览器中,对象的功能支持ECMAScript 国际化 API扩展。如果支持,您可以执行以下操作:toLocaleString
Date
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')
最新版本的 moment.js 会给你时区猜测:
例如PR#220:moment.tz.guess(); will result in 'America/New_York'