在 JavaScript 中获取客户端本地时区

4

我想获取客户端机器的本地时区。

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

moment.tz().zoneAbbr()

但是它给我通用时区即UTC,而我想要IST

有人可以指导我如何获取客户端机器的本地时区吗?


3
这个回答解决了你的问题吗?在JavaScript中获取客户端时区偏移量 - Wyck
3
这与React无关。 - spender
或者这个:https://dev59.com/bXVD5IYBdhLWcg3wXamd#22625076 - Wyck
4个回答

15

Intl.DateTimeFormat().resolvedOptions().timeZone 会返回客户端的时区。

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

console.log(timeZone);


10

如果你只想获取时区偏移量,这很简单:

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));


1

原生JS new Date() 可以获取机器的时区,不需要使用npm包来实现。


0

在@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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接