【问题标题】:ERROR Error: InvalidPipeArgument: "12-01-2020 - 12-02-2020' to a date' for pipe 'DatePipe'ERROR 错误:InvalidPipeArgument:管道“DatePipe”的“12-01-2020 - 12-02-2020”到日期
【发布时间】:2021-05-19 23:13:13
【问题描述】:

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

我从后端获得的日期是 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 ;

【问题讨论】:

  • 您确定response.projectStartDate 只是一次约会吗?喜欢12-01-2020
  • 连接后两个日期。单个日期工作正常
  • projectStartDate: "2020-12-21T13:55:00.000+00:00". I am converting it to 12-01-2020 / timestamp 我不清楚。

标签: javascript angular typescript datetime ecmascript-6


【解决方案1】:

日期格式: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');

【讨论】:

  • 我尝试仍然收到此错误。[FormsUI] 错误:InvalidPipeArgument: 'Unable to convert "2020-12-21-2020-12-21" into a date' for pipe 'DatePipe'.Thing是 projectduration 字段不占用两个日期。
【解决方案2】:

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) 中,然后以相同的格式进行格式化有点有趣。如果您想使用可能显示 12 ene 的 mediumDate(默认值)等格式,则管道更有意义,尤其是在您设置了应用程序区域设置的情况下。 2020

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多