For AI agents: the complete documentation index is available at /tc39-atlas/llms.txt, the full documentation bundle is available at /tc39-atlas/llms-full.txt, and this page is available as Markdown at /tc39-atlas/proposals/year/pending/proposal-intl-datetime-alignment.md.
  • 简体中文
  • Intl.DateTimeFormat Alignment With Other Standards ?

    中文标题:Intl.DateTimeFormat 与其他标准的对齐

    提案概览
    提案速览

    该提案旨在通过引入新的格式化选项(dateFields 和 timePrecision)使 Intl.DateTimeFormat 与 HTML 和 Unicode MessageFormat 等其他 Web 标准对齐,这些选项更加直观,并能防止无意义的组合。提议的解决方案基于 Unicode MessageFormat 草案,该草案也提议用于 HTML

    Note

    以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。

    Intl.DateTimeFormat 与其他标准的对齐

    状态

    • 阶段:1
    • champions:Eemeli Aro
    • 演示文稿:

    动机

    在 TC39 之外,Web 领域正在积极开展工作,为日期时间格式化设计 API 形状。 Web 用户将受益于相同的格式化选项 在 HTML、JavaScript 和 Unicode MessageFormat 中可用, 因为这将使开发人员更容易使用它们。

    如果 JavaScript 日期时间格式化 API 能够扩展以提供一个 也能用于 Web 栈其他部分的解决方案, 那么所有用户都可以使用相同的 API。

    先前的工作和其他提案

    • ECMA-402 已经提供了两种互不兼容的日期时间格式化选项风格:
      1. dateStyletimeStyle样式快捷方式
      2. 日期时间组件选项 提供了对各个字段更精细的控制。
    • whatwg/html#12591 正在为 HTML <time> 元素引入新的格式化能力。
    • Unicode MessageFormat 标准包含 草案函数 用于 :datetime:date:time 格式化。

    为什么当前选项不够用

    现有的 Intl.DateTimeFormat 组件选项支持无意义的组合,例如

    new Intl.DateTimeFormat('en', { month: 'long', minute: 'numeric' }).format()
    // "July at 36"

    而其样式快捷方式选项不足以指定结果中应包含日期和时间的哪些部分。

    这意味着,当日期时间格式化 API 在其他领域(如 HTML)开发时, 它们采用 JavaScript 当前的 API 是不合理的,而是应该开发新的东西。 新的选项并没有提供超过 ECMA-402 中已有的任何能力, 而是使其中的一部分以更好的引导开发人员走向良好国际化实践的选项提供。

    提议解决方案的概要

    Unicode MessageFormat 工作组花费了大量时间开发其 草案解决方案, 该方案也提议用于 HTML <time> 元素; 这应该作为 Intl.DateTimeFormat 选项包设计的起点。

    其最重要的特性是添加以下两个选项:

    • dateFields
      • weekday
      • day-weekday
      • month-day
      • month-day-weekday
      • year-month-day (默认)
      • year-month-day-weekday
    • timePrecision
      • hour
      • minute (默认)
      • second

    这些指定了输出中包含的日期和时间字段, 并且可以与现有的样式快捷方式结合使用。

    每个 dateFields 值都包含单个日期的表示,这是有意的, 因为这确保了它可以与任何 timePrecision 值组合。 如果将来要包含不包含日期的额外值,例如 year-month, 我们应该确保将此类值与任何时间表示组合视为错误。

    这项工作还应包括考虑将至少 timeZoneName 选项重命名为 timeZoneStyle,以更好地与其他选项名称对齐。 这样做需要让旧名称成为新名称的别名, 以保持与旧代码的兼容性。