扩展预定义的 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 属性 的语言环境,而无需指定语言。在我看来,这使它更具可重用性和可读性。
顺便说一下,||
符号用于当没有格式时,它将使用默认格式,无论该符号后面是什么。
我需要扩展预定义的 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 属性 的语言环境,而无需指定语言。在我看来,这使它更具可重用性和可读性。
顺便说一下,||
符号用于当没有格式时,它将使用默认格式,无论该符号后面是什么。