为什么 angular 日期管道不支持像 Intl.DateTimeFormat 这样的区域设置语言默认格式?

Why angular date pipe do not support locale language default format like Intl.DateTimeFormat?

我正在使用 angular 日期管道进行日期格式化。我想根据 user/client 语言环境格式化日期。例如,'mm/dd/yyyy' 代表美国英语 (en-US),dd.mm.yyyy 代表德语 (de-de)。 Angular 有短、中、长等格式选项。它们与语言环境默认格式不匹配。如果我选择自定义日期格式,我没有语言环境分隔符。 Intl DateTimeFormat 提供准确的格式化日期。有什么办法可以用 angular 日期管道来实现吗?

**编辑**

我看不到最近的 Angular 文档提到 registerLocaleData,所以我认为现在可以忽略它,因此您可以跳过第一部分。我想 Angular 会自动计算出您使用的语言环境,或者所有语言环境数据都捆绑到 Angular.


首先要确定的是您已经加载了语言环境数据。 您可以在 `app.module.ts` as stated in the documentation 中执行此操作:
import { registerLocaleData } from '@angular/common';
import localeDe from '@angular/common/locales/de';

registerLocaleData(localeDe);

那么,你有两个选择。

  1. 您可以将 LOCALE_ID 变量设置为您的首选语言环境(在您的情况下为 de-DE)。这可以通过在 ng buildng serve 中使用 --i18nLocale 标志来完成,也可以通过在 bootstrap (see documentation) 期间提供一个值来完成。如果你使用它,日期将根据你使用它的任何地方的语言环境规则进行格式化。
  2. 您可以在DatePipe 中将语言环境设置为第三个参数。如果您使用这种方法,它只会影响日期管道的特定用法。参数由 : 分隔,如果您想要某些先前参数的默认行为,您可以将其设置为未定义。以下示例显示了使用 de-DE 日期格式而不使用任何时区偏移的日期和时间:myDate | date : 'medium' : undefined : 'de-DE'。查看 this stackblitz 以获取更多示例