You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:02:57