扩展预定义的 Angular 日期管道格式,仅使用月份和年份本地化格式(例如 'en' 的 05/2020 或 'de' 语言环境中的 05.2020)

Extend predefined Angular date pipe formats with only month with year localized format (e.g 05/2020 for 'en' or 05.2020 in 'de' locale)

我需要扩展预定义的 angular 日期管道格式列表(你可以看到它 here),格式只包含月份和年份,例如 [=20 的 05/2020 =] 或 05.2020 for 'de',必须本地化。有没有正确的方法来做到这一点?我知道可以创建自己的管道并使用一些需要的格式进行扩展,但是当我指出格式时,例如'MM/yyyy' 它将使用该格式为每个语言环境设置每个日期的格式,但我需要将其本地化,因此我需要将我的自定义格式添加到现有功能中。

我有一个想法是使用 moment.js 而不是使用 angular 日期管道,另一个想法是从已经本地化的字符串中手动删除日期(我非常同意愚蠢的想法),但实际上我 运行 没有想法。

有什么简单的方法吗?或者必须在此处定义其他方法?

我遇到了这个问题,我找到的最简单的解决方案是创建共享服务方法,returns 日期格式字符串由本地化

getDateFormat(format?: 'full' | 'short'): string {
        if (format === 'full') {
            return this.translateService.currentLang === 'en'
                ? 'MMM dd, yyyy, HH:mm:ss'
                : 'dd. MMM yyyy, HH:mm:ss';
        }
        if (format === 'short') {
            return this.translateService.currentLang === 'en'
                ? 'MMM dd, yyyy'
                : 'dd. MMM yyyy';
        }
    }

我这里有更多的格式,而不是一种,但你可以很容易地只用一种,只需检查用户使用的是什么语言:

getDateFormat(): string {
  return this.translateService.currentLang === 'en' 
    ? 'MMM dd, yyyy, HH:mm:ss'
    : 'dd. MMM yyyy, HH:mm:ss';
)

更新:

因为我有更多的经验,所以当你有多种语言时,想分享一些不同的方法:

getDateFormat(): string {
  const formatsByLocale = {
    'en': 'MMM dd, yyyy, HH:mm:ss'
  }
  const format = formatsByLocale[this.translateService.currentLang]
  return format || 'dd. MMM yyyy, HH:mm:ss';
)

想法是,您可以拥有许多具有不同格式的不同语言环境,并访问具有相同 currentLang 属性 的语言环境,而无需指定语言。在我看来,这使它更具可重用性和可读性。 顺便说一下,|| 符号用于当没有格式时,它将使用默认格式,无论该符号后面是什么。