如何通过与 Flutter Cloud Firestore 插件中的日期进行比较来获取记录?
Posted
技术标签:
【中文标题】如何通过与 Flutter Cloud Firestore 插件中的日期进行比较来获取记录?【英文标题】:How to fetch records by comparing with date in flutter cloud firestore plugin? 【发布时间】:2018-11-12 18:49:03 【问题描述】:在使用 firebase cloud firestore 存储我的所有文档的 Flutter 应用程序上工作。我的文档有一个 startDateTime 字段,格式如下...
我想获取所有 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
以便它能够工作。
需要一些指导。
【问题讨论】:
【参考方案1】:只传递这个查询
.where("trip.startDateTime", isGreaterThanOrEqualTo: new DateTime.now())
由于 firebase 自动将 dart DateTime
对象转换为 Timestamp Firebase 对象。保存对象时也需要这样做。
如果对象类型是时间戳,您可以在右侧看到。
如果这不起作用,您可以在创建时以数字格式保存另一个对象。然后很容易比较。您可以像这样获得数字日期时间:
new DateTime.now().millisecondsSinceEpoch
【讨论】:
哦,伙计,我的大脑好像不在我身边。实际上,我也尝试了new DateTime.now()
,但这没有用,愚蠢的问题是......我的firebase中没有任何startDateTime
时间高于今天日期的文件。无论如何,感谢您的回复。
它适用于 android 但不适用于 ios。请帮忙。 @树
你在 iOS 上得到了什么?【参考方案2】:
我让它在 iOS 上运行。请检查下面的代码。
DateTime _now = DateTime.now();
return StreamBuilder<QuerySnapshot>(
stream: _store
.collection('rides')
.orderBy('rideDate')
.orderBy('rideType')
.where('rideDate', isGreaterThan: _now)
.snapshots(),
【讨论】:
【参考方案3】:您可以使用 DateTime()
按天或按小时进行比较:
final response = await FirebaseFirestore.instance
.collection('meetings')
.where(
'date',
isGreaterThanOrEqualTo: DateTime(selectedDay.year, selectedDay.month, selectedDay.day)
)
.get();
【讨论】:
以上是关于如何通过与 Flutter Cloud Firestore 插件中的日期进行比较来获取记录?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter如何根据某个值从firebase对列表进行分组
Flutter Firebase Cloud Messaging 如何自动关闭/取消通知?
即使文档中缺少请求的字段,如何安全地从 cloud-firestore 获取数据?
在进行身份验证之前,如何使用 Flutter 从 Cloud Firestore 搜索和访问数据?