首页 > 解决方案 > 从日期选择器将角度字符串转换为日期

问题描述

我一直在学习一些教程,现在停留在我想在材料日期选择器中显示我的数据值的地方。

问题是我的日期保存在一个纪元中:字符串值不兼容,不能显示为日历值。

现在我正在寻找每个人都在说的日期适配器,但我如何才能真正让它发挥作用?适配器只是将时间戳格式更改为 datepicker 可以获取的日期对象。有没有办法我可以在这个适配器上进行更改,以便它可以采取类似的方式firestore.String

@Injectable()
export class NgbDateFirestoreAdapter extends NgbDateAdapter<firestore.Timestamp> {
  /**
   * Converts Firestore TimeStamp to a NgbDateStruct
   */

  fromModel(ts: firestore.Timestamp): NgbDateStruct {
    if (ts instanceof firestore.Timestamp) {
      return {
        year: ts.toDate().getFullYear(),
        month: ts.toDate().getMonth() + 1,
        day: ts.toDate().getDate()
      };
    } else return null;
  }

  /**
   * Converts a NgbDateStruct to a Firestore TimeStamp
   */
  toModel(ngbDate: NgbDateStruct): firestore.Timestamp {
    const jsDate = new Date(
      ngbDate.year ? ngbDate.year : new Date().getFullYear(),
      ngbDate.month ? ngbDate.month - 1 : new Date().getMonth() - 1,
      ngbDate.day ? ngbDate.day : new Date().getDate(),
      12
    );
    return firestore.Timestamp.fromDate(jsDate);
  }


所以我知道这样的事情firebase。火库。时间戳存在,但我真正需要的是将字符串转换为日期对象,在日期选择器输入中,它类似于

<input matInput [matDatepicker]="picker1" [max]="tomorrow" placeholder="Date of Birth" #dob [value]="user.date">

我的 user.date 将是从字符串到日期的转换值。

现在的问题是 user.date 来自我的user$ | asyn,我不能做一个函数来转换 ts 因为它只会返回一个空值

@Injectable()
export class NgbDateFirestoreAdapter extends NgbDateAdapter<string> {
  /**
   * Converts String to a NgbDateStruct
   */
  fromModel(ts: string): NgbDateStruct {
    var tsInt = parseInt(ts);
    var tsDate= new Date(tsInt * 1 );
      return {
        year: tsDate.getFullYear(),
        month: tsDate.getMonth() + 1,
        day: tsDate.getDate()
      };

  }

  /**
   * Converts a NgbDateStruct to a String
   */
  toModel(ngbDate: NgbDateStruct): string {
    const jsDate = new Date(
      ngbDate.year ? ngbDate.year : new Date().getFullYear(),
      ngbDate.month ? ngbDate.month - 1 : new Date().getMonth() - 1,
      ngbDate.day ? ngbDate.day : new Date().getDate(),
      12
    );
    return ngbDate.toString();
  }
}

这就是我尝试过的

但是当我尝试切换日历以更改日期时,我收到一条错误消息

错误类型错误:无法在 NgbDateFirestoreAdapter.toModel (date-adapter.service.ts:29) 读取 null 的属性“年份”

标签: angular

解决方案


推荐阅读