Angular 日期管道在格式化日期后 iphone/ios 显示 NaN

Angular date pipe shows NaN on iphone/ios after formatting date

我正在 angular 8 / ionic 5 上制作 PWA。用户可以创建事件并将它们列在提要页面上。问题是,每个事件的 datetime 没有显示,并在 iphones/iOS 设备上给出错误“NaN”。 datetime 都从 start_at 获取信息,时间格式为“hh:mm:ss”。

以下代码显示了我们如何从 MySQL php laravel 服务器接收响应数据以列出事件:

getTodos() {
    console.log("arrived to gettodos");
    var id = this.userInfo.id
    this.todoService.getTodos('', '', '', id, false).subscribe(res => {
      console.log("res", res);
      console.log("frimes", res['frimes']);
      // debugger;
      // console.log(res);
      if (res['code'] === 200) {
        // console.log(res['data']);
        const userFrimes: any[] = res['frimes'];
        this.todos = [] as any[];
        console.log(userFrimes);
        if (userFrimes && userFrimes.length > 0) {
          userFrimes.forEach(uf => {
            var timeofFrime = this.formatAMPM(uf.start_at);
            if (!this.todoService.isFrimeExpired(uf.start_at)) {
              this.todos.push({
                owner: this.userInfo.username,
                title: uf.title,
                message: uf.description,
                date: uf.start_at,
                time: timeofFrime,
                max: uf.max,
                guests: uf.member.length, //uf.guests == null ? 0 : uf.guests,
                frime_id: uf.id,
                status: uf.status,
                user_id: uf.user_id
              });
            }
          });
        }
      } else if (res['code'] === 205) {

      } else if (res['code'] === 401) {

      }
    }, err => {

      //this.errorMessage = err.message;
      console.log(err);
    });

  }

在这里您可以看到正在为 formatAMPM() 函数获取属性 datetime 并更改为 AM/PM 日期格式。

  formatAMPM(d) {
    let dd = d + " UTC";
    let date = new Date(dd);
    var hours = date.getHours();
    var minutes = date.getMinutes();
    var ampm = hours >= 12 ? 'PM' : 'AM';
    hours = hours % 12;
    hours = hours ? hours : 12; // the hour '0' should be '12'
    var min = minutes < 10 ? '0' + minutes : minutes;
    var strTime = hours + ':' + min + ' ' + ampm;
    return strTime;
  }

此处最终日期字符串显示在管道字段中,它在 ios 上显示“NaN”错误。 错误本身说:

ERROR Error: InvalidPipeArgument: 'Unable to convert "2021-05-19 17:15:38" into a date' for pipe 'Re'.

顺便说一句,'Re' 是什么意思?

            <ion-col size="3" class="date-wrapper">
              <h3 class="notification-date">
                {{ item.date | date: "shortDate" }}
              </h3>
              <h3 class="notification-date">
                {{ item.time | date: "HH:mm" }}
              </h3>
              <h3 class="notification-date">{{ item.guests + '/' + item.max }}</h3>
            </ion-col>

希望你能帮我解决这个问题,因为这让我最近很头疼... 提前致谢!

好的,我已经通过添加这行代码修复了它:

    d = d.replace(" ", "T");

日期的格式类似于 dd-MM-yyyy HH:mm:ss,我需要添加“T”,因此它类似于 dd-MM-yyyyTHH:mm:ss

  formatAMPM(d) {
    d = d.replace(" ", "T");
    let dd = d + " UTC";
    let date = new Date(dd);
    var hours = date.getHours();
    var minutes = date.getMinutes();
    var ampm = hours >= 12 ? 'PM' : 'AM';
    hours = hours % 12;
    hours = hours ? hours : 12; // the hour '0' should be '12'
    var min = minutes < 10 ? '0' + minutes : minutes;
    var strTime = hours + ':' + min + ' ' + ampm;
    return strTime;
  }