ERROR 错误:InvalidPipeArgument:管道 'DatePipe' 的“12-01-2020 - 12-02-2020' 到一个日期”

时间:2021-02-17 04:04:16

标签: javascript angular typescript datetime ecmascript-6

我试图连接两个日期并分配给变量,但它抛出了一个错误 错误错误:InvalidPipeArgument:“无法将“12-01-2020 - 13-02-2020”转换为管道“DatePipe”的日期。我哪里出错了?

我从后端获取的日期是 projectStartDate: "2020-12-21T13:55:00.000+00:00". 我将其转换为 12-01-2020 / 时间戳,然后将两者连接并分配给 projectduration 值.

            this.startDate = this.datepipe.transform(response.projectStartDate, 'yyyy-MM-dd','es-ES');
            this.endDate = this.datepipe.transform(response.projectEndDate, 'yyyy-MM-dd','es-ES');

            response.gbRFEbean.projectDuration.value = this.startDate + "-" +this.endDate ;

2 个答案:

答案 0 :(得分:0)

locale 是 DatePipe 转换的第四个参数,timezone 是第三个参数。目前,您将语言环境作为第三个参数。我可能会像这样配置您的语言环境(并且日期管道将自动适用于您的语言环境而无需指定):

Missing locale data for the locale "XXX" with angular

transform 采用 javascript 日期或 ISO 日期字符串,所以我猜您的日期(projectStartDate、projectEndDate)是不是 ISO 格式的字符串?该错误消息暗示这些字段之一具有 12-01-2020 - 13-02-2020

的完整值

带有 ISO 日期字符串的示例代码

  startDate = '2020-01-12';
  endDate = '2020-02-13';

  formattedStartDate = this.datePipe.transform(this.startDate);
  formattedEndDate = this.datePipe.transform(this.endDate);

  constructor(private datePipe: DatePipe) {
    console.log(`${this.formattedStartDate} - ${this.formattedEndDate}`);
  }

带有 javascript 日期的示例代码

  startDate = new Date('2020-01-12');
  endDate = new Date('2020-02-13');

  formattedStartDate = this.datePipe.transform(this.startDate, 'yyyy-MM-dd');
  formattedEndDate = this.datePipe.transform(this.endDate, 'yyyy-MM-dd');

  constructor(private datePipe: DatePipe) {
    console.log(`${this.formattedStartDate} - ${this.formattedEndDate}`);
  }

如果您的日期是 dd-MM-yyyy 格式的字符串,您可以使用像 luxon 这样的库来解析它们:

npm i luxon

并导入

import { DateTime } from 'luxon';

并解析

startDate = DateTime.fromFormat("12-01-2020", "dd-MM-yyyy").toISODate();

最后一点,将日期放在 ISO 日期格式 (yyyy-MM-dd) 中,然后将它们格式化为相同的格式,这有点有趣。如果您想使用诸如 mediumDate(默认值)之类的可能显示 12 ene 的格式,管道更有意义,尤其是在您设置了应用程序区域设置的情况下。 2020

答案 1 :(得分:0)

日期格式:DD-MM-YYYY 无效。

您可以尝试使用:

new Date("12-01-2020")

它将在 Chrome 开发工具中提供 Invalid Date

解决方案

您可以将日期格式更改为MM-DD-YYYY,然后将其传递给datepipe.transform


let date = response.projectStartDate.replace(/(\d{2})-(\d{2})-(\d{4})/, "$2-$1-$3")
this.startDate = this.datepipe.transform(date, 'yyyy-MM-dd','es-ES');
date = response.projectEndDate.replace(/(\d{2})-(\d{2})-(\d{4})/, "$2-$1-$3")
this.endDate = this.datepipe.transform(date , 'yyyy-MM-dd','es-ES');