如何在 JavaScript 中获取时区名称?
2022-08-30 01:20:54
我知道如何获得时区偏移量,但我需要的是能够检测“美国/纽约”之类的东西。这是否可能来自JavaScript,或者我必须根据偏移量进行估计?
我知道如何获得时区偏移量,但我需要的是能够检测“美国/纽约”之类的东西。这是否可能来自JavaScript,或者我必须根据偏移量进行估计?
国际化 API 支持获取用户时区,并且所有当前浏览器都受支持。
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
请记住,在某些支持国际化 API 的旧版浏览器上,该属性设置为而不是用户的时区字符串。据我所知,在撰写本文时(2017年7月),除IE11之外的所有当前浏览器都将以字符串形式返回用户时区。timeZone
undefined
大多数赞成的答案可能是获取时区的最佳方式,但是,根据定义返回IANA时区名称,这是英文的。Intl.DateTimeFormat().resolvedOptions().timeZone
如果您希望时区名称采用当前用户的语言,则可以从 的字符串表示形式中解析它,如下所示:Date
function getTimezoneName() {
const today = new Date();
const short = today.toLocaleDateString(undefined);
const full = today.toLocaleDateString(undefined, { timeZoneName: 'long' });
// Trying to remove date from the string in a locale-agnostic way
const shortIndex = full.indexOf(short);
if (shortIndex >= 0) {
const trimmed = full.substring(0, shortIndex) + full.substring(shortIndex + short.length);
// by this time `trimmed` should be the timezone's name with some punctuation -
// trim it from both sides
return trimmed.replace(/^[\s,.\-:;]+|[\s,.\-:;]+$/g, '');
} else {
// in some magic case when short representation of date is not present in the long one, just return the long one as a fallback, since it should contain the timezone's name
return full;
}
}
console.log(getTimezoneName());
在 Chrome 和 Firefox 中进行了测试。
当然,这在某些环境中不会按预期工作。例如,node.js 返回 GMT 偏移量(例如 ),而不是名称。但我认为它作为后备方案仍然是可读的。GMT+07:00
附言:在IE11中不起作用,就像解决方案一样。Intl...