时区名称国际化:如何获取指定语言的时区列表?
获取指定语言环境下的时区信息
首先明确:Intl.supportedValuesOf('timeZone')返回的是当前运行时支持的所有IANA时区标识符列表,这个列表是固定的,和语言环境(locale)无关——不存在“指定locale专属的时区标识符列表”,因为时区标识符是全球统一的标准(比如Asia/Shanghai、America/New_York)。
但如果你需要的是指定语言环境下的时区本地化显示名称,可以通过Intl.DateTimeFormat结合时区标识符来生成,步骤如下:
- 先获取所有支持的时区标识符
- 对每个标识符,用目标locale的
Intl.DateTimeFormat提取本地化名称
代码示例
// 获取所有支持的时区标识符 const allTimeZoneIds = Intl.supportedValuesOf('timeZone'); // 指定目标语言环境,比如中文(中国大陆) const targetLocale = 'zh-CN'; // 生成带本地化名称的时区列表 const localizedTimeZones = allTimeZoneIds.map(zoneId => { // 创建指定时区和语言环境的日期格式化器 const formatter = new Intl.DateTimeFormat(targetLocale, { timeZone: zoneId, timeZoneName: 'long' // 可选 'short' 获取短名称(如“北京时间”) }); // 通过格式化日期提取时区名称 const formatParts = formatter.formatToParts(new Date()); const zoneName = formatParts.find(part => part.type === 'timeZoneName').value; return { id: zoneId, localizedName: zoneName }; }); // 输出示例:[{ id: 'Asia/Shanghai', localizedName: '中国标准时间' }, ...] console.log(localizedTimeZones);
补充说明
- 不同JavaScript运行时(浏览器、Node.js等)支持的时区列表可能略有差异,但均基于IANA时区数据库。
- 如果仅需要时区标识符,直接使用
Intl.supportedValuesOf('timeZone')即可,无需指定locale,因为标识符本身是无地域差异的标准值。
内容的提问来源于stack exchange,提问作者Prakash Gupta
相关产品推荐
相关产品推荐

