📅  最后修改于: 2023-12-03 15:07:24.091000             🧑  作者: Mango
在编写Web应用程序时,经常需要获取用户的时区。JavaScript提供了一种简单的方法来获取用户的时区信息 - 通过Date对象的getTimezoneOffset()函数。
要获取用户的时区,请执行以下操作:
const offset = new Date().getTimezoneOffset();
getTimezoneOffset()函数将返回一个数字,表示用户时区的偏移量,以分钟为单位。例如,如果用户位于东京,日本标准时间比UTC快9个小时(540分钟),则上述代码将返回-540。
将偏移量转换为正确的时区名称可能会有点棘手。幸运的是,我们可以使用Intl对象提供的API来轻松地执行此操作。
const timezoneName = Intl.DateTimeFormat().resolvedOptions().timeZone;
这将返回当前地区的格式化日期和时间的组合,该组合包括所在时区的名称,例如America/New_York。注意,Intl对象并不总是返回正式的时区名称,而是可能返回Windows时区ID或时间偏移量的名称。
上述方法基于用户系统的设置,并不能始终得到精确的时区信息。如果您需要获取更准确的时区信息,则需要使用第三方API或从服务器端获取数据。目前,有几个API可以获取用户的时区信息,包括IP-API、FreeGeoIP和GeoIP2等。
const getUserTimezone = async () => {
const response = await fetch('https://freegeoip.app/json/');
const data = await response.json();
return data ? data.time_zone : undefined;
};
getUserTimezone().then((timezone) => console.log(timezone));
上述代码将获取用户的IP地址并将其发送到FreeGeoIP API以获取用户所在位置。然后,将从响应中提取时区信息并将其返回给调用方。
JavaScript提供了多种获取用户时区的方法,这些方法本身并没有很大难度。了解这些方法可以让你编写更具交互性的Web应用,以更好地满足用户的需求。