据我所知,Firebase 提供了以下 2 种方法,用于在将文档写入 Firestore 集合时处理日期:
以下内容将生成一个当前时间戳,我假设它代表所有区域的一致日期,其格式在documentation中注明。并且是在将文档写入集合时获取当前日期的推荐方法:
admin.firestore.FieldValue.serverTimestamp()
还有以下方法接受日期作为参数。这将生成与相同 Firestore 时间戳格式匹配的结果:
admin.firestore.Timestamp.fromDate(new Date())
我一直在考虑在我的特定情况下使用后者作为生成日期的方法,我可以使用该日期将匹配日期写入 Firestore 中集合中的文档以及附加单独插入到我的实时数据库中。我需要保证两个地方都写入完全相同的日期。
我在云函数中做什么:
const datePosted = new Date();
// then when setting the data in Firestore i do the following to convert it
admin.firestore().collection(`/posts`).doc().set({
foo: 'bar',
datePosted: admin.firestore.Timestamp.fromDate(datePosted)
})
// followed by a subsequent write to my Realtime database using the same date
admin.database().ref(`posts`).set({
foo: 'bar',
datePosted: Date.parse(datePosted)
})
任何人都可以提供任何关于这种方法是否是一个坏主意的见解吗?我需要查明以我描述的方式生成日期是否是一种有效的方法,或者它是否不可靠,因为我的文档中生成的日期可能会根据我的云实例的时间和/或区域而变化函数被实例化。 我回避了云函数跨不同区域实例化所需的不同时间或出于任何其他原因。
最佳答案
admin.firestore.FieldValue.serverTimestamp()
生成一个时间戳,保证准确(由 Google 计算)。即使请求由于某种原因(例如离线)而延迟,实际时间也会在请求到达 Firestore 时得到解决。
admin.firestore.Timestamp.fromDate(new Date())
生成一个时间戳,该时间戳使用用户设备计算的当前时间。 无法保证用户设备的时间设置准确。仅当您想了解用户设备上的时钟时间(即使它不准确)时才使用此选项。
这取决于你。如果您希望保证请求到达服务器时的准确时间,请使用服务器时间戳。如果您希望客户端计算时间,请使用new Date()
。
关于javascript - 有关在 Firebase 云函数内部生成一致日期的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59572723/