如何通过flutter cloud firestore插件中的日期比较来获取记录?

问题描述 投票:0回答:4

正在开发一个 flutter 应用程序,我使用 firebase cloud firestore 来存储我的所有文档。我的文档有一个 startDateTime 字段,其格式如下...

enter image description here

我想获取startDateTime大于或等于当前日期的所有记录。这是我执行此操作的颤振代码...

Firestore.instance.collection("trips")
    .where("trip.createdByUID", isEqualTo: this.userDetails['id'])
    .where("trip.startDateTime", isGreaterThanOrEqualTo: new DateTime.now().toString() )
    .getDocuments().then((string) {
        print('Firestore response111: , ${string.documents.length}');

        string.documents.forEach((doc) => print("Firestore response222: ${doc.data.toString()}" ));
    })

但这不起作用。无法理解如何使用

isGreaterThanOrEqualTo
才能正常工作。

需要一些指导。

firebase dart google-cloud-firestore flutter
4个回答
21
投票

仅传递此查询

.where("trip.startDateTime", isGreaterThanOrEqualTo: new DateTime.now())

因为 firebase 自动将 dart

DateTime
对象转换为 Timestamp Firebase 对象。保存对象时也需要执行相同的操作。

enter image description here

如果对象类型是时间戳,可以在右侧看到。

如果这不起作用,您可以在您的创作中以数字格式保存另一个对象。然后就很容易比较了。您可以像这样获取数字日期时间:

new DateTime.now().millisecondsSinceEpoch


2
投票

您可以使用

DateTime()
:

按天或按小时等任何内容进行比较
final response = await FirebaseFirestore.instance
   .collection('meetings')
   .where(
      'date',
      isGreaterThanOrEqualTo: DateTime(selectedDay.year, selectedDay.month, selectedDay.day)
   )
   .get();

0
投票

我已经在 iOS 上运行了。请检查下面的代码。

DateTime _now = DateTime.now();

return StreamBuilder<QuerySnapshot>(
  stream: _store
      .collection('rides')
      .orderBy('rideDate')
      .orderBy('rideType')
      .where('rideDate', isGreaterThan: _now)
      .snapshots(),

0
投票

下面给出的答案很好,但问题是他们使用的是本地设备日期。根据您的应用程序,这可能是问题,也可能不是问题。要从 Firebase 端获取日期,您可以执行以下操作:

final docId = hourCollection.doc().id;

await hourCollection.doc(docId).set({'hour': FieldValue.serverTimestamp()});
final actualTimestampData = await hourCollection.doc(docId).get();
hourCollection.doc(docId).delete();

return actualTimestampData['hour'];
© www.soinside.com 2019 - 2024. All rights reserved.