将快照中所有 Firestore 时间戳转换为 JS 日期的方法?

您将如何编写一种方法将快照中的所有Firestore 时间戳转换为 JavaScript 日期?


例如,posts集合中的快照可能会返回几个 Firestore 时间戳 ( createdDtTm, modifyDtTm):


[

  { 

    text: 'My new post', 

    uid: 'nzjNp3Q', 

    createDtTm: Timestamp { seconds: 1596239999, nanoseconds: 999000000 },

    modifyDtTm: Timestamp { seconds: 1596239999, nanoseconds: 999000000 },  

  }, 

  { 

    text: 'Another post', 

    uid: 'nzjNp3Q', 

    createDtTm: Timestamp { seconds: 1596239999, nanoseconds: 999000000 },

    modifyDtTm: Timestamp { seconds: 1596239999, nanoseconds: 999000000 },  

  }, 

]

通过映射数组并为每个时间戳使用toDate()方法,转换单个日期非常简单(例如, createDtTm.toDate())


但是,在不显式指定时间戳字段的情况下,转换这两个(或任意任意数量的)Firestore 时间戳的更通用的方法是什么?


例如,Firestore 时间戳是否具有可用于识别的唯一类型?是否需要假设命名约定(例如,字段名称包含DtTm)?其他?


前面的问题回答了如何在快照中转换单个时间戳或多个文档中的单个时间戳。但是当存在多个时间戳时,我还没有找到一种通用的方法来转换快照中的所有时间戳。更具体地说,我对一种在 React中使用的方法感兴趣,该方法会将 JavaScript 日期(而不是 Firestore 时间戳)传递给它,同时也不会在每次将新的时间戳字段添加到数据模型时创建依赖项来更新 Provider / 收藏。ProviderConsumers


心有法竹
浏览 89回答 1
1回答

慕尼黑5688855

我认为对此没有任何全局方法,但我认为创建一个分析快照并更改它的函数很容易。这不是很复杂。在 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前任。snap 你可以这样称呼它:globalToData(snap.data())这应该转换所有级别的文档快照中的所有时间戳(我测试到第 3 级嵌套混合映射和数组)。我们没有您的解决方案,但您可以在应用程序中间的某个地方实施它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript