Firestore 如何保存日期?

Posted

技术标签:

【中文标题】Firestore 如何保存日期?【英文标题】:How does Firestore save dates? 【发布时间】:2018-12-18 21:27:54 【问题描述】:

我最近发现了firestore.Timestamp,因此我尝试将firestore.FieldValue.serverTimestamp(); 分配给一个,但没有成功。相反,它说Type 'FieldValue' is not assignable to type 'Timestamp',我会说这很奇怪。 serverTimestamp() 不应该是 Timestamp 而不是 FieldValue?如果不将时间戳保存到 Firestore,firestore.Timestamp 的目的是什么?有没有办法获得与firestore.Timestamp 兼容的服务器时间戳,或者我应该完全避免使用时间戳,而我所有的日期都坚持firestore.FieldValue

【问题讨论】:

【参考方案1】:

serverTimestamp() 只返回标记值,告诉 Firestore 服务器它应该使用服务器上的当前时间作为您尝试设置的字段的值。它本身并不返回实际的 Timestamp 对象。

您使用它的原因是确保在服务器上设置的日期一致,而不是取决于用户设备上的时钟是否正确。

如果您想知道设备上的当前时间,只需使用语言或操作系统提供的本机日期/时间对象即可。

【讨论】:

我使用的是timestamp = firestore.FieldValue.serverTimestamp();,它会说我不能这样做,因为Type 'FieldValue' is not assignable to type 'Timestamp' 所以我尝试了timestamp = <any>firestore.FieldValue.serverTimestamp();,错误就消失了。有什么理由我不应该这样做? 正如我在回答中所说, serverTimestamp() 不返回时间戳。您可以使用它代替实际的时间戳来设置文档中字段的日期。 对,我只是这样做,然后将其作为更大对象的一部分保存到 Firestore。在我的情况下,timestamp 的类型为 firestore.Timestamp。我可以详细说明并说它是 myObject.timestamp = <any>firestore.FieldValue.serverTimestamp(); 然后我更新我的 Firestore 文档 myDocRef.update(myObject) 所以我需要将 firestore.FieldValue.serverTimestamp() 分配给 firestore.Timestamp 是的,正如我所说,它不返回时间戳。错误消息告诉您它返回的内容 - FieldValue。正确输入变量,然后在更新中使用它。只需使用通常会传递时间戳的 FieldValue。 好的,我明白了。当我应该使用FieldValue 时,我使用的是firestore.Timestamp。 Firestore 中的时间戳是否未保存为 firestore.Timestamp ?如果不将时间戳保存到 Firestore,firestore.Timestamp 的目的是什么?我意识到firestore.FieldValue.serverTimestamp() 在服务器端返回一个firestore.FieldValue,但是如果我们不能将它与serverTimestamp() 一起使用,为什么还有firestore.Timestamp

以上是关于Firestore 如何保存日期?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用firebase-admin在firestore中将日期保存为时间戳?

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

如何在 Firestore 中一次创建/更新多个文档

如何按创建日期而不是名称对 Cloud Firestore 集合中的文档进行排序?

使用python在Firestore中运行GeoPoint

如何从firestore的路径中获取布尔值