我想获取客户端机器的本地时区。
我尝试了moment-timezone npm包,并使用以下命令:
moment.tz().zoneAbbr()
但是它给我通用时区即UTC,而我想要IST
有人可以指导我如何获取客户端机器的本地时区吗?
我想获取客户端机器的本地时区。
我尝试了moment-timezone npm包,并使用以下命令:
moment.tz().zoneAbbr()
但是它给我通用时区即UTC,而我想要IST
有人可以指导我如何获取客户端机器的本地时区吗?
Intl.DateTimeFormat().resolvedOptions().timeZone
会返回客户端的时区。
const { timeZone } = Intl.DateTimeFormat().resolvedOptions();
console.log(timeZone);
如果你只想获取时区偏移量,这很简单:
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));
原生JS new Date()
可以获取机器的时区,不需要使用npm包来实现。
在@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);