在 React js 中获取客户端本地时区

Get client local timezone in React js

我想获取客户端计算机本地时区。

我使用以下命令尝试了 moment-timezone npm 包

moment.tz().zoneAbbr()

但它给了我通用时区,即 UTC,但我想要 IST[​​=11=]

谁能指导我如何获取客户端计算机本地时区。

新的 Date() 为您提供机器时区,无需 npm 包即可获取本地时区 JavaScript 为您做好准备。

如果您只想要时区偏移量,这非常简单:

const timezoneOffset = (new Date()).getTimezoneOffset();

console.log(timezoneOffset);

这将为您提供计算机设置的任何内容。

但是,如果您想知道实际的时区,这还不够,因为每个偏移量都有很多时区。

奇怪的是,没有超级直接的方法。但是,您可以通过将 Date 转换为字符串并使用一点正则表达式来获取它:

const date = new Date();
const dateAsString = date.toString();
const timezone = dateAsString.match(/\(([^\)]+)\)$/)[1];

console.log(timezone);

这会给你类似“东部夏令时”的信息(对我来说)。

如果要将其转换为缩写,则必须找到可能值的列表并创建映射函数:

const input = 'Eastern Daylight Time';
const tz = {
 'Eastern Daylight Time': 'EDT',
 // add more here
};

const toTZAbbreviation = input => tz[input];

console.log(toTZAbbreviation(input));

Intl.DateTimeFormat().resolvedOptions().timeZone 将 return 客户端的时区,并且可用于 JavaScript,而不仅仅是 React。

const { timeZone } = Intl.DateTimeFormat().resolvedOptions();

console.log(timeZone);

> "America/New_York"

为@samanime 的回答添加一些额外的信息。

你将从这里得到时区

const dateAsString = date.toString();
const timezone = dateAsString.match(/\(([^\)]+)\)$/)[1];
console.log("timezone", timezone);

现在,如果您想获取时区的缩写或缩写形式,如 IST、GMT 等,只需选择时区字符串的第一个字母即可。

var matches = timezone.match(/\b(\w)/g);
var abbreviations = matches.join('');
console.log("abbreviations", abbreviations);

例如:-

时区:印度标准时间

缩写:IST