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

标签 javascript reactjs firebase google-cloud-firestore

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

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

[
  { 
    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)?其他?

前面的问题回答了如何转换 single Timestampmultiple documents in a snapshot 中的单个时间戳。但是,当存在多个时间戳时,我还没有找到一种通用方法来转换快照中的所有时间戳。更具体地说,我对在 React Provider 中使用的方法感兴趣,该方法将 JavaScript 日期(而不是 Firestore 时间戳)传递给其 Consumers,同时也不创建依赖项每次将新的时间戳字段添加到数据模型/集合时更新提供程序。

最佳答案

我认为没有任何全局方法可以做到这一点,但我认为创建一个分析快照并更改它的函数很容易。这不是很复杂。在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())

这应该转换文档快照所有级别中的所有时间戳(我测试了嵌套混合映射和数组的第三级)。我们没有您的解决方案,但您可以在应用程序中间的某个位置实现此解决方案。

关于javascript - 将快照中的所有 Firestore 时间戳转换为 JS 日期的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63362436/

相关文章:

javascript - Div 未显示且未弹出任何错误

javascript - 使 div 在图像/容器上居中

javascript - 从按钮onclick调用函数不起作用 react js

javascript - 在 componentDidMount 中访问 React 组件自己的实例

swift - Cron 作业与安全规则

javascript - 如何将 js 文件的内容从 URL 打印到屏幕上?

javascript - 在 github 页面上进行 React 工作

reactjs - 如何使用带有 onChange 函数 REACT 的 useCallback Hook

ios - IOS 的 Firebase 存储不从相机胶卷上传 .MOV

android - Firebase Analytics 与 WearOS 兼容吗?