获取时间戳大于24小时的文档

时间:2020-07-11 22:09:15

标签: android firebase kotlin google-cloud-firestore

因此,我试图获取仅24小时的文档,我将时间戳记值保存在数据库中作为时间戳记

data class Order(@ServerTimestamp val timestamp:Date? = null)

现在,当我查询时,我想带回其时间戳大于24小时但查询不成功的文档,我已经在控制台上检查并创建了所有查询

suspend fun getIncompletedOrders(): Resource<List<Order>> {
        val reminderList = mutableListOf<Order>()
        val oneDay = Date().time + (24 * 60 * 60 * 1000)
        val query = FirebaseFirestore.getInstance()
            .collection("orders")
            .whereEqualTo("uid",FirebaseAuth.getInstance().currentUser?.uid)
            .whereIn("status", listOf(1,2,4,5,6))
            .whereGreaterThan("timestamp",oneDay)
            .get().await()
        for(document in query.documents){
            reminderList.add(document.toObject(Order::class.java)!!)
        }
        return Resource.Success(reminderList)
    }

如您在这里看到的,我得到了当前时间,将其添加24小时,并检查Firebase中存储的时间戳是否大于该时间,但是将时间戳更改为前一天的时间时,我没有收到任何文档Firestore,怎么了?

enter image description here

1 个答案:

答案 0 :(得分:3)

此行正在计算一个长整数,这是自unix时代以来的毫秒数,未来24小时:

val oneDay = Date().time + (24 * 60 * 60 * 1000)

但是,数据库中的时间戳字段是Firestore时间戳类型字段。 Firestore不会将整数与时间戳进行比较。您只能将时间戳与时间戳进行比较。您可以从SDK传递Date或Timestamp对象进行比较。尝试将数字转换为日期:

whereGreaterThan("timestamp", new Date(oneDay))

还请记住,您的日期表示将来一天中的某个时刻,但是您的问题描述指出,您希望过去的一天作为时间戳记 。在这种情况下,您可能想减去一天而不是增加一天。