从firestore查询数据时,如何将保存的字符串格式的日期与当前日期进行比较?

Posted

技术标签:

【中文标题】从firestore查询数据时,如何将保存的字符串格式的日期与当前日期进行比较?【英文标题】:How to I compare a date in saved string format to current date when querying data from firestore? 【发布时间】:2019-08-27 09:02:01 【问题描述】:

我在特定集合中创建的每个文档中都有一个日期字段。此日期字段的数据保存为字符串。当执行查询时,我想通过 firebase 中的 whereField() 方法属性将日期字段与当前日期进行比较,以便获得与此比较一致的文档。

我在下面尝试了一些代码,但它并不能完全满足要求。 日期字段中的数据以eventDate: "Fri Aug 30 2019"格式保存

   let db = Firestore.firestore()

   let date = Date.init()

   let formatter = DateFormatter()

   formatter.dateStyle = .long
   formatter.timeStyle = .none
   formatter.locale = Locale(identifier: "en_US")
   formatter.dateFormat = "eee MMM dd yyyy"

   let currDate = formatter.string(from: date)

   db.collection("Events").whereField("eventDate", isGreaterThanOrEqualTo: currDate).getDocuments() 
   // completion code not necessary for this question

上面的代码只返回发生在Tue Aug 27 2019Wed Aug 28 2019 的事件,并且知道还有更多事件发生的日期。

【问题讨论】:

请将您的数据库结构添加为截图。 【参考方案1】:

使用日历组件应该是更好的方法,像这样?

let db = Firestore.firestore()

let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month, .day], from: Date())
let currDate = calendar.date(from: components)!

db.collection("Events").whereField("eventDate", isGreaterThanOrEqualTo: currDate).getDocuments() 

【讨论】:

它和我之前晒的有什么不同? 在您的代码中,currDate 是一个字符串;通过我的修改,currDate 是一个 Date 不是吗? 我的currDate是一个字符串,因为“eventDate”值本身就是一个字符串..我这样做是为了达到比较字符串日期的目的

以上是关于从firestore查询数据时,如何将保存的字符串格式的日期与当前日期进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firestore 获取数组?

如何将很长的字符串保存到firebase firestore数据库中?

如何从 FireStore 查询文档名称?

如何格式化和显示从 AngularFire 返回的 Firestore 数据?

如何将JSON字符串列行转换为可查询表

如何通过在 Firestore 中的查询从索引中获取多个文档到其他索引