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查询数据时,如何将保存的字符串格式的日期与当前日期进行比较?