如何在 Firestore 中使用时间戳值查询一整天

Azh*_*san 2 timestamp date flutter google-cloud-firestore

我有一个 firestore 集合“订单”,其文档具有时间戳值。我想根据时间戳过滤该集合的文档。例如,过滤 2022 年 7 月 1 日下的订单。我将从 Datepicker 获取的日期值作为 DateTime 传递。我形成的查询是

_db.collection('orders')
        .where('driverId', isEqualTo: sp.getString('uid'))
        .where('timeStamp', isGreaterThanOrEqualTo: Timestamp.fromDate(pickedDate!))
        .get().then((querySnapshot){
      querySnapshot.docs.forEach((element) {
        orders.add(element.data());
      });
      print(orders.length);
    });
Run Code Online (Sandbox Code Playgroud)

问题是我从 7 月 1 日到今天收到订单,因为我已经给出了isGreaterThanOrEqualTo。但如果我给出isEqualTo,它不会返回任何内容。我猜这意味着需要01-07-2022 00:00:00。那么获取选定日期订单的正确查询是什么

Fra*_*len 5

TimestampFirestore 中的对象是非常具体的时间点,具有微秒精度。因此,如果您想匹配一整天的所有时间戳,那就是时间戳值的范围。

典型的方法是创建一天后的时间戳,然后将其添加到该范围所需的第二个子句中:

_db.collection('orders')
    .where('driverId', isEqualTo: sp.getString('uid'))
    .where('timeStamp', isGreaterThanOrEqualTo: Timestamp.fromDate(pickedDate!))
    .where('timeStamp', isLessThan: timestampOfStartOfNextDay)
Run Code Online (Sandbox Code Playgroud)