You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Luxon或Intl获取所有支持的区域设置?

如何用Luxon或Intl获取所有支持的区域设置

Luxon本身没有提供像Moment.js的moment.locales()那样直接返回所有已加载区域设置的方法——它依赖运行环境的Intl API,而Intl也没有原生函数能直接返回全部支持的区域。不过可以通过以下两种方式实现需求:

方法一:利用Intl API验证候选区域

你可以先定义一份标准的区域候选列表(基于IANA语言子标签),再通过Intl API验证每个区域是否被当前环境支持:

/**
 * @returns 当前环境支持的所有Intl区域设置
 */
static listLuxonLocales(): string[] {
  // 可根据业务需求扩展的基础区域列表
  const candidateLocales = [
    'af', 'ar', 'az', 'be', 'bg', 'bn', 'bs', 'ca', 'cs', 'cy', 'da', 'de',
    'el', 'en', 'en-AU', 'en-CA', 'en-GB', 'en-US', 'es', 'es-AR', 'es-ES',
    'et', 'eu', 'fa', 'fi', 'fr', 'fr-CA', 'fr-FR', 'gl', 'he', 'hi', 'hr',
    'hu', 'hy', 'id', 'is', 'it', 'ja', 'ka', 'kk', 'km', 'kn', 'ko', 'lt',
    'lv', 'mk', 'ml', 'mn', 'mr', 'ms', 'nb', 'nl', 'nn', 'pa', 'pl', 'pt',
    'pt-BR', 'pt-PT', 'ro', 'ru', 'sk', 'sl', 'sq', 'sr', 'sr-Cyrl', 'sr-Latn',
    'sv', 'ta', 'te', 'th', 'tr', 'uk', 'ur', 'uz', 'vi', 'zh', 'zh-CN', 'zh-HK', 'zh-TW'
  ];

  return candidateLocales.filter(locale => {
    try {
      new Intl.DateTimeFormat(locale);
      return true;
    } catch (e) {
      return false;
    }
  });
}

方法二:用Luxon的hasLocale方法筛选

Luxon提供了DateTime.hasLocale()方法来检查区域兼容性,结合候选列表即可得到可用区域:

import { DateTime } from 'luxon';

/**
 * @returns Luxon支持的所有区域设置
 */
static listLuxonLocales(): string[] {
  const candidateLocales = [/* 同上的区域列表 */];
  return candidateLocales.filter(locale => DateTime.hasLocale(locale));
}

补充说明

  • 和Moment.js需要手动加载区域包不同,Luxon直接复用环境的Intl支持,所以可用区域完全取决于运行环境(浏览器版本、Node.js版本)。
  • 如果需要扩展区域支持范围,可以引入@formatjs/intl-datetimeformat这类polyfill库,并添加对应区域的数据包。

内容的提问来源于stack exchange,提问作者uminder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:25:27