我需要一种方法来检测给定日期对象的时区。我不想要偏移量,也不想要完整的时区名称。我需要获取时区缩写。
例如,GMT、UTC、PST、MST、CST、EST 等...
这可能吗?我得到的最接近的是解析 的结果date.toString()
,但即使这样也不会给我一个缩写。它给了我时区的长名称。
我需要一种方法来检测给定日期对象的时区。我不想要偏移量,也不想要完整的时区名称。我需要获取时区缩写。
例如,GMT、UTC、PST、MST、CST、EST 等...
这可能吗?我得到的最接近的是解析 的结果date.toString()
,但即使这样也不会给我一个缩写。它给了我时区的长名称。
原生解决方案:
var zone = new Date().toLocaleTimeString('en-us',{timeZoneName:'short'}).split(' ')[2]
console.log(zone)
您可以传递undefined
而不是en-us
默认为浏览器的当前语言环境。
moment-timezone包括一个未记录的方法.zoneAbbr()
,它返回时区缩写。这还需要一组规则,可根据需要选择和下载。
这样做:
<script src="moment.js"></script>
<script src="moment-timezone.js"></script>
<script src="moment-timezone-data.js"></script>
<script>
moment().tz("America/Los_Angeles").zoneAbbr();
</script>
返回:
'PDT' // As of this posting.
Evan Czaplicki 已经起草了一份提案,将时区 API 添加到浏览器。
这在 Chrome、Firefox 中完美运行,但主要在 IE11 中运行。在 IE11 中,没有像“Indian Chagos Time”这样的直接缩写的时区将返回“ICT”而不是正确的“IOT”
var result = "unknown";
try{
// Chrome, Firefox
result = /.*\s(.+)/.exec((new Date()).toLocaleDateString(navigator.language, { timeZoneName:'short' }))[1];
}catch(e){
// IE, some loss in accuracy due to guessing at the abbreviation
// Note: This regex adds a grouping around the open paren as a
// workaround for an IE regex parser bug
result = (new Date()).toTimeString().match(new RegExp("[A-Z](?!.*[\(])","g")).join('');
}
console.log(result);
结果:
"CDT"