如何将firebase时间戳转换为日期角度



typescipt

public Patients: Observable<any>;
constructor(private db: AngularFirestore) {
this.Patients = this.db.collection('Patients').valueChanges();

//从firebase获取数据:

ngOnInit(): void {
this.Patients.subscribe((response) => {
this.prepareData(response);
this.console.log(response);
});
}

//在本节中,用于将数据添加到apexcharts

prepareData(patients) {

patients.forEach((patient) => {

});
}

我猜firebase Timestamp在ISO8601中,JavaScriptDate方法并不完全支持它。

要将其转换为进一步使用,您可以尝试以下操作:

const firebaseDate = "20190412T131518.000Z";
const convertedDate = new Date(firebaseDate.replace(/(....)(..)(.....)(..)(.*)/, '$1-$2-$3:$4:$5'));
console.log(convertedDate);

EDIT刚刚看到您的评论回复,您只需将秒数传递给日期方法

const firebaseObj = { seconds: 1612890000, nanoseconds: 0 }
const convertedDate = new Date(firebaseObj.seconds)
console.log(convertedDate)

firebase时间戳提供了一个toDate方法,该方法基本上返回一个Date对象。

您可以创建一些实用程序类型和保护,这些类型和保护在处理Firestore记录时可能会派上用场。

export interface FireTimeStamp extends Date {
toDate: () => Date;
}
export type TimeStamp = Date | FireTimeStamp;
export const isFireStamp = (value: FireTimeStamp | Date | unknown): value is FireTimeStamp =>
(value as FireTimeStamp)?.toDate && (value as FireTimeStamp)?.toDate() !== undefined;
export const isTimeStamp = (value: TimeStamp | unknown): value is TimeStamp =>
isFireStamp(value) || value instanceof Date;

这里有一个实用函数,当你不确定它是date对象还是firebase时间戳对象时,可以获取日期。

export const toDate = (date: TimeStamp): Date => isFireStamp(date) ? date.toDate() : date;

如果你需要显示日期,你也可以有一个自定义管道来转换日期。


@Pipe({
name: 'toDate'
})
export class ToDatePipe implements PipeTransform {
transform(date: TimeStamp): Date {
return toDate(date);
}
}

最新更新