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

Firestore按日期查询异常:期望获取当日数据却返回昨日+当日结果

解决Firestore当日数据查询问题

问题根源

你当前的查询起始时间设为昨日0点,结束时间是明日0点,这个范围自然会包含昨日和今日的数据,不符合仅获取当日数据的需求。另外用isEqualTo查不到数据,是因为Firestore存储的Timestamp包含精确到毫秒的时间戳,而你构造的DateTime是0点整,和存储的时间毫秒部分完全匹配的概率极低,所以返回空结果。

修正后的查询代码

// 获取当前UTC时间的日期部分
final now = DateTime.now().toUtc();
// 构造今日0点的UTC时间
final todayStart = DateTime.utc(now.year, now.month, now.day);
// 构造明日0点的UTC时间
final tomorrowStart = todayStart.add(const Duration(days: 1));

final querySnapshot = await _firebaseFirestore
    .collection('users')
    .doc(_user.uid)
    .collection('foods')
    .where("createdAt", isGreaterThanOrEqualTo: todayStart)
    .where("createdAt", isLessThan: tomorrowStart)
    .get();

关键说明

  • 时间范围精准定位:直接以今日0点作为起始,明日0点作为结束,确保只覆盖当日的所有时间。
  • UTC一致性:全程使用UTC时间,避免本地时区和Firestore存储的UTC Timestamp之间的转换误差。
  • 使用isGreaterThanOrEqualTo:确保包含当日0点整创建的数据(如果有的话)。

内容的提问来源于stack exchange,提问作者Carl.G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:04:57