如何解决将快照中所有Firestore时间戳覆盖到JS日期的方法?
您如何编写一种将快照中的 全部 Firestore时间戳转换为JavaScript日期的方法?
例如,来自posts
集合的快照可能会返回几个Firestore时间戳(createdDtTm
,modifyDtTm
):
[
{
text: 'My new post',
uid: 'nzjNp3Q',
createDtTm: Timestamp { seconds: 1596239999,nanoseconds: 999000000 },modifyDtTm: Timestamp { seconds: 1596239999,
},{
text: 'Another post', modifyDtTm: Timestamp { seconds: 1596239999,]
通过在数组上映射并为每个时间戳使用toDate()方法(例如createDtTm.toDate()
),转换单个日期非常简单
但是,在不显式指定Timestamp字段的情况下,转换这两个(或任意任意数量的)Firestore时间戳的更通用的方法是什么?
例如,Firestore时间戳记是否具有可用于识别的唯一类型?是否需要假设命名约定(例如,字段名称包含DtTm
)?其他吗?
先前的问题回答了如何转换single Timestamp或multiple documents in a snapshot中的单个时间戳。但是,当存在多个时间戳时,我还没有找到一种通用的方法来转换快照中的所有时间戳。更具体地说,我对在React Provider
中使用的方法感兴趣,该方法会将JavaScript日期(不是Firestore时间戳)传递给Consumers
,同时也没有创建每次更新Provider的依赖项新的“时间戳记”字段将添加到数据模型/集合中。
解决方法
我认为没有任何全局方法,但是我认为创建一个可以分析快照并对其进行更改的函数很容易。这不是很复杂。在node.js中,我这样做是这样的:
function globalToData (snapshot) {
for (const field in snapshot)
if (snapshot[field] instanceof Firestore.Timestamp) {
snapshot[field] = snapshot[field].toDate()
}
else if (snapshot[field] instanceof Object) {
globalToData (snapshot[field]);
}
return snapshot;
};
如果您获得DocumentSnapshot
作为前任。捕捉,你可以这样称呼它:
globalToData(snap.data())
这应该转换所有级别的文档快照中的所有时间戳(我测试到嵌套混合图和数组的第三级)。我们没有您的解决方案,但是您可以在应用程序的中间位置实现它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。