【问题标题】:What controls the date format for a locale in Intl.DateTimeFormat?什么控制 Intl.DateTimeFormat 中语言环境的日期格式?
【发布时间】:2023-02-23 03:43:32
【问题描述】:

什么规范或正文控制 Intl.DateTimeFormat 中语言环境使用什么日期格式?

例如。指定 en-CA 日期格式为“m/d/yyyy”但 fr-CA 为 yyyy-mm-dd 的过程/决定/正文是什么?

是否有我可以为自己的目的使用的公共标准文件?

【问题讨论】:

  • 对于英语和法语,看起来像 Canada's government prefers YYYY-MM-DD。显然Canadian passports显示DD/MM/YYYY。后者是“美国”标准。因此,en-CA(英语)和fr-CA(法语)格式之间存在区别。
  • 我认为不值得投反对票。也许是势均力敌的投票。话虽如此,OP 应该解释他们试图解决什么问题。您可以通过打印格式来获取格式列表。您是否正在寻找关于为什么选择每种格式的解释?
  • 有关更多信息,请参阅维基百科上的date format by country。我假设发布 ECMAScript 标准的委员会可以决定每种语言/国家使用哪种格式。
  • 我想知道什么时候会发生变化以及为什么会发生变化。例如。最近 en-CA 从 YYYY-MM-DD 更改为 DD/MM/YYYY,一些测试因此而失败。我正在解决的问题是因为客户想知道更改的上下文(谁控制它,为什么更改,更改发生的频率等)

标签: javascript date-formatting


【解决方案1】:

每个浏览器或 JS 引擎确定每个语言环境的国际化 (i18n) 格式。

§ 21.4.4.38

21.4.4.38 Date.prototype.toLocaleDateString([reserved1 [, reserved2]])

包含 ECMA-402 国际化 API 的 ECMAScript 实现必须按照 ECMA-402 规范中的规定实现此方法。如果 ECMAScript 实现不包含 ECMA-402 API,则使用此方法的以下规范:

此方法返回一个字符串值。String 的内容是实现定义的, 但旨在以与主机环境当前区域设置的约定相对应的方便、人类可读的形式表示当前时区中日期的“日期”部分。

此方法的可选参数的含义在 ECMA-402 规范中定义;不包括 ECMA-402 支持的实现不得将这些参数位置用于任何其他用途。

在这种情况下,ECMAScript 标准的 Google V8 实现定义了自己的规则来管理给定语言环境的日期格式。

我不确定谷歌在哪里存储每个语言环境的 i18n 数据;但根据this Stack Overflow commentUnicode CLDR (JSON) project 一直是格式的可靠来源。

有趣的是,首选的加拿大英语格式是 y-MM-dd,但 Google 的实施必须使用替代变体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 2012-08-27
    • 2023-04-03
    • 2012-01-30
    • 1970-01-01
    • 2015-02-06
    • 2019-08-10
    相关资源
    最近更新 更多