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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:06:35