如何判断Firebase时间戳是否大于当前日期
解决Firestore时间戳与当前日期的比较问题
问题核心
Firestore文档中存储的createdAt是Firebase专属的Timestamp类型,直接和原生Date对象做大小比较会因类型不匹配导致结果异常。
正确实现方案
以下两种方法都能可靠完成时间比较:
方法1:将Timestamp转为原生Date对象
利用Timestamp的toDate()方法转换后,再和当前日期对比:
let myDocs = []; const querySnapshot = await getDocs(collection(database, 'myCollection')); querySnapshot.forEach((doc) => { const docData = doc.data(); const createdAtDate = docData.createdAt.toDate(); if (createdAtDate < new Date()) { myDocs.push({ id: doc.id, ...docData }); } });
方法2:使用Timestamp自带的比较方法
直接调用compareTo方法,和当前时间的Timestamp对象对比:
let myDocs = []; const querySnapshot = await getDocs(collection(database, 'myCollection')); const now = Timestamp.now(); querySnapshot.forEach((doc) => { const docData = doc.data(); // compareTo返回-1代表前者小于后者,0为相等,1为大于 if (docData.createdAt.compareTo(now) < 0) { myDocs.push({ id: doc.id, ...docData }); } });
性能优化建议
如果数据量较大,优先在查询阶段过滤数据,避免拉取全量文档后再客户端筛选,节省带宽和计算资源:
const now = Timestamp.now(); const q = query(collection(database, 'myCollection'), where('createdAt', '<', now)); const querySnapshot = await getDocs(q); let myDocs = querySnapshot.docs.map(doc => ({ id: doc.id, ...doc.data() }));
内容的提问来源于stack exchange,提问作者Juan Diego Luna Cazares
相关产品推荐
相关产品推荐

