0

0

利用JavaScript Intl API 获取标准时区名称列表

聖光之護

聖光之護

发布时间:2025-10-29 11:45:19

|

950人浏览过

|

来源于php中文网

原创

利用javascript intl api 获取标准时区名称列表

本文旨在解决在从Moment.js迁移到Day.js后,如何高效获取一份简洁的时区名称列表的问题。我们将介绍并演示如何利用浏览器原生的`Intl.supportedValuesOf('timeZone')` API来获取标准IANA时区标识符。该方法无需额外库,且能自动处理夏令时,提供了一个专业且易于实现的解决方案,尤其适用于需要精简时区列表的场景。

Day.js与时区列表的挑战

在进行日期和时间处理时,获取并管理时区信息是常见的需求。许多开发者曾习惯于使用Moment.js及其配套的moment-timezone插件,通过moment.tz().names()等方法轻松获取完整的时区名称列表。然而,随着Moment.js进入维护模式,以及Day.js等更轻量级库的兴起,开发者逐渐转向新的解决方案。

Day.js自身的核心库设计旨在保持精简,它专注于日期时间对象的创建、操作和格式化。虽然Day.js通过其timezone插件可以处理特定时区的日期时间,但它本身并不提供直接获取所有可用时区名称列表的功能。这导致了一个常见问题:如何在不依赖Moment.js的情况下,获取一个简洁且包含夏令时(DST)变化的有效时区名称列表?

Intl.supportedValuesOf('timeZone'):现代JavaScript解决方案

对于获取时区名称列表的需求,现代JavaScript提供了一个强大且标准的原生API:Intl.supportedValuesOf('timeZone')。这个方法是Intl对象(Internationalization API)的一部分,它允许应用程序访问宿主环境(通常是浏览器或Node.js)支持的各种国际化数据。

立即学习Java免费学习笔记(深入)”;

Intl.supportedValuesOf('timeZone')方法返回一个包含所有受支持的IANA时区标识符(也称为TZ database名称)的数组。这些标识符是全球公认的标准,例如"America/New_York"、"Europe/London"、"Asia/Shanghai"等。它们不仅代表了特定的地理区域,而且这些区域内部的夏令时规则(如果适用)也已被这些标识符隐含地涵盖。这意味着,通过获取这些标识符,您无需担心手动处理夏令时变化。

实现代码示例

要在浏览器环境或支持Intl API的Node.js环境中获取时区名称列表,您可以使用以下简洁的代码:

/**
 * 获取浏览器支持的IANA时区名称列表。
 * 这些名称是标准化的,并自动处理夏令时。
 *
 * @returns {string[]} 一个包含所有支持时区名称的数组。
 */
function getSupportedTimezoneNames() {
  if (typeof Intl !== 'undefined' && typeof Intl.supportedValuesOf === 'function') {
    return Intl.supportedValuesOf('timeZone');
  } else {
    console.warn("当前环境不支持 Intl.supportedValuesOf('timeZone') API。");
    return [];
  }
}

// 在控制台打印所有时区名称
const timezoneList = getSupportedTimezoneNames();
console.log("支持的时区名称列表:");
timezoneList.forEach(timeZone => {
  console.log(timeZone);
});

// 如果只需要在控制台快速查看,可以直接使用以下代码:
// for (const timeZone of Intl.supportedValuesOf('timeZone')) {
//   console.log(timeZone);
// }

将上述代码片段在您的浏览器控制台中运行,或者在支持的环境中作为JavaScript代码执行,您将获得一个包含数百个标准时区标识符的列表。这个列表是经过精简和标准化的,符合许多应用场景对“短小精悍”列表的需求。

Transor
Transor

专业的AI翻译工具,支持网页、字幕、PDF、图片实时翻译

下载

优势与注意事项

  1. 原生支持,无需依赖: 这种方法直接利用了浏览器或Node.js环境内置的国际化API,无需引入任何第三方库(如moment-timezone或Day.js的任何特定插件)即可获取时区列表。这有助于减小项目体积并减少外部依赖。

  2. 标准化和准确性: 返回的IANA时区标识符是国际公认的标准,它们在准确性和维护性方面具有高度可靠性。

  3. 自动处理夏令时: IANA时区标识符本身就包含了其所代表区域的所有历史和未来的夏令时规则。因此,您无需额外逻辑来考虑夏令时变化。

  4. 简洁性: 相较于某些库可能提供的冗余或非标准的时区名称,Intl.supportedValuesOf('timeZone')返回的列表是规范且易于理解的。它避免了提供500多个可能包含别名或旧名称的庞大列表,而是聚焦于核心的、可用的时区。

  5. 与Day.js的结合: 尽管Day.js本身不提供此列表,但一旦您通过Intl.supportedValuesOf获取了这些时区名称,您可以将它们与Day.js的timezone插件结合使用,例如:

    // 假设您已经安装并使用了dayjs和timezone插件
    // import dayjs from 'dayjs';
    // import utc from 'dayjs/plugin/utc';
    // import timezone from 'dayjs/plugin/timezone';
    // dayjs.extend(utc);
    // dayjs.extend(timezone);
    
    // const newYorkTime = dayjs().tz("America/New_York");
    // console.log(newYorkTime.format());

    您可以使用getSupportedTimezoneNames()返回的任何一个名称作为tz()方法的参数。

总结

在从Moment.js迁移到Day.js后,若需要获取一个简洁且包含夏令时规则的时区名称列表,最专业和高效的方法是利用JavaScript的Intl.supportedValuesOf('timeZone') API。这个原生方法提供了标准化的IANA时区标识符,无需额外库,且能够自动处理夏令时,完美满足了对精简、准确时区列表的需求。它不仅是一个独立的解决方案,也能很好地与Day.js等现代日期时间库协同工作。

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

554

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

374

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

731

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

477

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

394

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

991

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

656

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

551

2023.09.20

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

2

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.7万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.2万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号