如何获取Firestore中文档创建的时间戳?代码问题求助
解决Firestore文档创建时间戳获取问题
你当前的代码里有个关键错误:firebase.firestore.FieldValue.serverTimestamp()是用来写入数据时让服务器生成时间戳的占位符,不是用来读取已存在文档的创建时间的,所以这样拿到的date并不是文档实际的创建时间。
下面给你两种正确的实现方式,按需选择:
方法1:主动存储创建时间戳(推荐)
这种方式需要你在创建domiciliarios文档时,主动添加一个createdAt字段,用serverTimestamp()设置。这样后续读取时可以直接获取,还能用来做查询、排序。
创建文档时的代码示例:
addDomiciliario(domiciliario: Domiciliario) { return this.afs.collection('domiciliarios').add({ ...domiciliario, createdAt: firebase.firestore.FieldValue.serverTimestamp() }); }
读取时的修正代码(myService.ts):
getDomiciliarios() { this.domiciliarios = this.afs.collection('domiciliarios').snapshotChanges().map(actions => { return actions.map(a => { const data = a.payload.doc.data() as Domiciliario; const id = a.payload.doc.id; // 直接读取文档中存储的createdAt字段 const createdAt = data.createdAt; return { id, ...data, createdAt }; }); }); return this.domiciliarios; }
方法2:使用文档元数据的创建时间
如果你的文档已经创建且没有添加createdAt字段,可以直接从文档快照的元数据中获取Firestore自动维护的创建时间。不过这个时间不能用来做查询条件,离线场景下可能无法获取最新值。
修正后的myService.ts代码:
getDomiciliarios() { this.domiciliarios = this.afs.collection('domiciliarios').snapshotChanges().map(actions => { return actions.map(a => { const data = a.payload.doc.data() as Domiciliario; const id = a.payload.doc.id; // 从文档元数据中提取创建时间 const createdAt = a.payload.doc.metadata.createTime; return { id, ...data, createdAt }; }); }); return this.domiciliarios; }
最后提醒下:以后别再用FieldValue.serverTimestamp()来读取时间啦,它只在写入数据时有用哦~
内容的提问来源于stack exchange,提问作者Paco Zevallos
相关产品推荐
相关产品推荐

