异常
InvalidPipeArgument:'2017-12-05 05:30:00管道'DatePipe'
代码
以下代码在mac machine chrome浏览器上运行正常但在safari中失败:
import { Pipe, PipeTransform } from '@angular/core';
import { DatePipe } from '@angular/common';
import * as moment from 'moment';
@Pipe({
name: 'dateCulturePipe',
})
export class dateCulturePipe implements PipeTransform {
transform(value: string) {
if (value) {
value = moment.utc(value).local().format('YYYY-MM-DD HH:mm:ss');
}
return value;
}
}
使用
{{ (item.Date | dateCulturePipe) | date:'dd-MMM-yyyy HH:mm' }}
值
Date
2018-06-01 11:39:41.880
2018-05-25 10:39:54.597
NULL
2018-05-23 09:33:00.000
2018-05-22 13:04:20.190
2018-05-22 11:20:14.530
2018-05-19 11:55:53.750
2018-05-19 11:55:04.117
2018-05-18 11:34:06.190
2018-05-10 11:57:18.507
2018-05-10 11:44:25.893
2018-05-10 11:42:47.467
2018-05-10 11:42:21.197
2018-05-10 11:41:46.363
2018-05-10 11:40:42.483
NULL
NULL
2018-05-04 11:04:00.000
NULL
2018-05-03 11:04:00.000
NULL
已检查 - 不知道在哪里更改
答案 0 :(得分:1)
您可以参考此特定问题
Invalid argument for pipe 'DatePipe' - Safari cannot parse Date offsets
要解决此问题,请更换字符串
'2017-11-02 00:00:00.000'.replace(/\s/g, "T")
答案 1 :(得分:0)
当日期的格式为“ 2017-11-02 00:00:00.000”时,Safari浏览器将引发错误。它要求使用T格式的日期,即“ 2017-11-02T00:00:00”,而不是日期和时间之间的空格。
上述带有正则表达式以匹配空间并用“ T”代替的解决方案将起作用,并且该问题应在Safari上解决。
答案 2 :(得分:0)
我也遇到了同样的问题,我已通过在API响应的日期格式中提供T和Z来更正。 以前是从后端来的,就像是2017-07-28 12:02:14,现在是从后端来的,我改成了2017-07-28T12:02:14.000Z格式,如果从后端不能更改,那么从前端使用replace方法,然后添加'Z'
'2017-11-02 00:00:00.000'.replace(/\s/g, "T") + 'Z'
最终结果将是:-2017-11-02T00:00:00.000Z
第二种方法:-从空格中分离出字符串,然后添加“ T”并连接另一部分,最后添加“ Z”。
let dateParts = '2017-11-02 00:00:00.000'.split(' ');
console.log(dateParts[0]+'T'+dateParts[1]+'Z')
现在在前端,显示所需的格式,重要的是,如果要显示UTC格式,则斜角管将无法为您提供,您必须自己做。例如,如果其“ 2017-11-02T12:00:00.000Z)
{{mydate | date:'h:mm a'}} -> 5:30 PM -> according to local timezone
如果要使用小写字母,请添加小写字母
{{mydate | date:'h:mm a' | lowercase}}-> 5:30 pm -> according to local timezone
如果您想按原样显示UTC日期而不更改为本地时间,那么
HTML文件
{{showUTCDate(mydate) | date: 'h:mm a' | lowercase}} -> Output 12:00 pm
TS文件
showUTCDate(utcdate){
let date = new Date(utcdate);
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}
您也可以使用管道来更改此日期。