Firestore V9 如何判断Timestamp类型并转换为JavaScript Date对象
Firebase V9 下 Timestamp 相关操作解决方案
你遇到的问题是 V9 采用模块化 API 设计后,不再将相关类挂载在全局 firebase 对象下导致的,具体操作方式如下:
- 首先需要从 firestore 包中导入
Timestamp类
import { Timestamp } from "firebase/firestore";
- 判断字段是否为 Timestamp 实例
直接用导入的Timestamp类做instanceof判断即可,逻辑和 V8 版本一致,只是判断的类来源从全局对象改为模块化导入。 - Timestamp 转 Date 对象
合法的 Timestamp 实例依然内置toDate()方法,可以直接调用完成转换。如果你遇到返回字段没有toDate()方法的情况,大概率是字段已经被序列化为只包含seconds和nanoseconds属性的普通对象,此时可以先通过属性构造 Timestamp 实例再转换。
适配 V9 后的完整代码示例
import { Timestamp } from "firebase/firestore"; // 其他获取 doc 的逻辑保持不变 let data = doc.data(); for (let field in data) { let value = data[field]; // 校验是否为 Timestamp 实例 if (value instanceof Timestamp) { data[field] = value.toDate(); continue; } // 兼容已被序列化为普通对象的场景 if (value && typeof value === 'object' && 'seconds' in value && 'nanoseconds' in value) { data[field] = new Timestamp(value.seconds, value.nanoseconds).toDate(); } }
内容的提问来源于stack exchange,提问作者timthekoder
相关产品推荐
相关产品推荐

