在 JavaScript 中根据时区获取用户所在国家/地区

问题描述 投票:0回答:1

我正在寻找一种解决方案,根据 JavaScript 中的时区确定用户所在的国家/地区,而不依赖于 IP 到位置服务,例如 maxmind、ipregistry 或 ip2location。目标是利用

moment-timezone
库将时区映射到国家/地区,并在未找到匹配的情况下返回匹配的国家/地区或原始时区。

javascript timezone momentjs moment-timezone
1个回答
0
投票

为了在不诉诸 IP 到位置服务的情况下实现此目的,以下代码利用

moment-timezone
库将时区映射到国家/地区。函数
getCountryByTimeZone
迭代国家列表并检查提供的时区是否与任何国家/地区关联。如果找到匹配项,它将使用
Intl.DisplayNames
检索完整的国家/地区名称;否则,它返回原始时区。

// Import the moment-timezone library
const moment = require('moment-timezone');

/**
 * Get the user's country based on their time zone.
 * @param {string} userTimeZone - The user's time zone.
 * @returns {string} The user's country or the original time zone if not found.
 */
function getCountryByTimeZone(userTimeZone) {
  // Get a list of countries from moment-timezone
  const countries = moment.tz.countries();

  // Iterate through the countries and check if the time zone is associated with any country
  for (const country of countries) {
    const timeZones = moment.tz.zonesForCountry(country);

    if (timeZones.includes(userTimeZone)) {
      // Use Intl.DisplayNames to get the full country name
      const countryName = new Intl.DisplayNames(['en'], { type: 'region' }).of(country);
      return countryName;
    }
  }

  // Return the original time zone if no matching country is found
  return userTimeZone;
}

// Example usage
const userTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
const userCountry = getCountryByTimeZone(userTimeZone);
console.log('User country based on time zone:', userCountry);

用途:

  • 将提供的代码复制并粘贴到您的 JavaScript 环境中。
  • 使用用户的时区调用 getCountryByTimeZone 函数来检索用户的国家/地区。
  • 如果未找到匹配项,该函数将返回匹配的国家/地区或原始时区。

注:

  • 确保您的项目中安装了时刻时区库。
  • 结果的准确性取决于图书馆提供的时区数据的完整性和准确性。
© www.soinside.com 2019 - 2024. All rights reserved.