0

在我的Angular应用程序中,我必须以 ' MM/dd/yyyy' 格式显示日期。Web API 以“ 2020-12-01T00:00:00”格式返回日期。

当我使用下面的代码行时,DatePipe无法识别日期,但如果我手动将日期修改为“ 2020-12-01T00:00:00.000Z”,则DatePipe转换为预期的“ MM/dd/yyyy”格式。

let res = this.datePipe.transform(new Date('2020-12-01T00:00:00'),'MM/dd/yyyy');

let res = this.datePipe.transform(new Date('2020-12-01T00:00:00.000Z'),'MM/dd/yyyy');

第一个不工作,第二个工作。但我的 API 以第一种格式返回数据。

有人可以帮我使用 Typescript 将日期从第一种格式更改为第二种格式吗?

4

2 回答 2

1
  1. 我不知道您的代码示例是否只是用于演示您的问题的简化版本,但如果您在应用程序中使用DatePipe ,则可以只使用formatDate函数。DatePipe所做的基本上是一个空检查并将函数包装在一个 try/catch 块中。
  2. 如果将Date对象传递给管道或函数,则应使用对象实例。因此,如果您遇到问题,则可能是浏览器在调用时尝试解析日期失败new Date('...')。试试console.log(isNaN(new Date('2020-12-01T00:00:00')))。如果结果为,那么您就知道浏览器是罪魁祸首。
  3. 管道或函数可以处理字符串并使用正则表达式来解析它们。无需将值包装在Date对象中,只需传递字符串并查看会发生什么。
let res = this.datePipe.transform('2020-12-01T00:00:00','MM/dd/yyyy');
let res2 = this.datePipe.transform('2020-12-01T00:00:00.000Z','MM/dd/yyyy');
  1. 我无法在 Windows 上使用 Angular 10 和 Chrome 重新创建您的问题。
于 2020-11-19T18:08:17.347 回答
1

Z 表示 ISO 8601

尝试:

let res = this.datePipe.Transform(new Date('2020-12-01T00:00:00').toISOString(),'MM/dd/yyyy');

于 2020-11-19T18:08:54.207 回答