如何通过Firebase Timestamp进行时间范围查询?代码报错求助
解决Firebase查询中的类型不匹配错误:Expected type 'mc', but it was: a custom xh object
问题根源
错误的核心是你传给where条件的yesterday类型不匹配。date.setDate()方法返回的是时间戳数值,但Firebase Firestore的查询要求参数类型必须与字段存储类型严格一致:如果你的createdDate字段存的是JavaScript Date对象或Firebase Timestamp对象,直接传数字时间戳就会触发类型不匹配报错。
修复方案
方案1:将yesterday转为JavaScript Date对象
修改日期处理逻辑,确保yesterday是标准的Date类型:
let today = new Date(); let yesterday = new Date(today); // 复制当前日期对象,避免修改原对象 yesterday.setDate(today.getDate() - 1); // 调整为昨天的日期
方案2:如果字段是Firebase Timestamp类型
若createdDate存储的是Firebase官方的Timestamp对象,可将Date转为Timestamp后再查询:
import { Timestamp } from "firebase/firestore"; // 先导入Timestamp工具 let today = new Date(); let yesterdayDate = new Date(today); yesterdayDate.setDate(today.getDate() - 1); let yesterday = Timestamp.fromDate(yesterdayDate);
修正后的完整代码
import { collection, query, where, getDocs } from "firebase/firestore"; // 假设db已完成初始化 let today = new Date(); let yesterday = new Date(today); yesterday.setDate(today.getDate() - 1); const dataTable = collection(db, 'sales'); let mquery = query(dataTable, where('createdDate', "<", yesterday)); const qSnap = await getDocs(mquery); console.log(qSnap);
额外注意事项
务必确认sales集合中createdDate字段的实际存储类型——Firestore对类型匹配要求严格,数字、Date、Timestamp是三种完全不同的类型,不可混用查询。
内容的提问来源于stack exchange,提问作者HimonHimu
相关产品推荐
相关产品推荐

