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
相关产品推荐
相关产品推荐

