Javascript 有没有一种方法可以通过角度管道获得格式化的日期输出

Javascript 有没有一种方法可以通过角度管道获得格式化的日期输出,javascript,angular,date-formatting,Javascript,Angular,Date Formatting,我有一个ISO区域日期时间字符串,看起来像是“2020-01-15T10:45:20+02:30[US/Denver]”。我正在尝试制作一个有角度的管道,使其看起来像是'2020年1月15日(美国/丹佛)。最好的方法是什么 目前我还没有一个合适的管道实现,这就是我实现预期输出的方式 {{ dateInput | date:"dd-MMM-yyyy" }}{{ someFuntionThatReturnsTimeZoneWithStringManipulation() }}

我有一个ISO区域日期时间字符串,看起来像是“2020-01-15T10:45:20+02:30[US/Denver]”。我正在尝试制作一个有角度的管道,使其看起来像是
'2020年1月15日(美国/丹佛)
。最好的方法是什么

目前我还没有一个合适的管道实现,这就是我实现预期输出的方式

{{ dateInput | date:"dd-MMM-yyyy" }}{{ someFuntionThatReturnsTimeZoneWithStringManipulation() }}

提前感谢

您可以扩展默认日期管道、拆分字符串、转换日期并返回组合字符串

下面是一个快速实现

烟斗

从'@angular/core'导入{Inject,LOCALE_ID,Pipe,PipeTransform};
从“@angular/common”导入{DatePipe};
@烟斗({
名称:'dateLocation',
纯:真的
})
导出类DateLocationPipe扩展DatePipe实现PipeTransform{
构造函数(@Inject(LOCALE\u ID)LOCALE:string){
超级(现场);
}
转换(值:任意,格式?:字符串,时区?:字符串,区域设置?:字符串):任意{
const date=value.split('[');
返回super.transform(日期[0],格式,时区,区域设置)+'('+date[1].替换(/\]/g');
}
}
组件模板

{{dateInput}dateLocation:“dd-MMM-yyyy”}
工作示例:

更新:忽略UTC时间偏移 您可以在
+
符号上再执行一次
拆分
,并忽略时间戳的时间偏移

烟斗

返回super.transform(
日期[0]。拆分(“+”)[0],
格式,
时区,
场所
) + 
' (' + 
日期[1]。替换(/\]/g',);

工作示例:

我过去成功地创建了一个管道来包装moment.js库,请参见示例:(Angular 2,可能需要稍微调整才能使其工作)。这是一个很好的解决方案,但使用dd-MMM-yyy-HH:mm格式时,时间似乎不正确。这是其他时间打印的。不是ISO区域日期时间字符串中提供的值。你能对此发表评论吗?@Klaus:时间戳上有一个。因此,相应地计算时间。您希望显示什么时间?输入字符串中的时间相同。例如,如果输入字符串为2020-01-15T10:45:20+02:30[US/Denver]。那么我的预期产出是2020年1月1日10:45:20(美国/丹佛)。仅根据格式化程序输出输入值,不进行任何日期/时间转换或manipulations@Klaus:然后,您可以在
+
符号上对时间戳再执行一次拆分,并忽略偏移量。我已经更新了答案。@Klaus:这不是问题。这就是Javascript日期对象的工作方式。您可以在此处找到更多信息: