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

时间:2018-06-03 05:30:01

标签: firebase dart google-cloud-firestore flutter

在flutter应用程序上工作,我正在使用firebase云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以便它可以正常工作。

需要一些指导。

3 个答案:

答案 0 :(得分:5)

只传递此查询

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

由于firebase会自动将dart DateTime对象转换为Timestamp Firebase对象。保存对象时也需要执行相同的操作。

enter image description here

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

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

new DateTime.now().millisecondsSinceEpoch

答案 1 :(得分:0)

我在iOS上正常工作。请检查下面的代码。

DateTime _now = DateTime.now();

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

答案 2 :(得分:0)

您可以使用 DateTime() 按天或小时进行比较:

final response = await FirebaseFirestore.instance
   .collection('meetings')
   .where(
      'date',
      isGreaterThanOrEqualTo: DateTime(selectedDay.year, selectedDay.month, selectedDay.day)
   )
   .get();