当我使用.get()
获取FireStore文档时,我的时间字段将返回此值:createdAt: "2018-12-25T01:04:05.189Z"
,但是当我使用onSnapshot
时,时间字段将返回不同的值:
1)使用onSnapshot
:
componentDidMount() {
this.unsubscribe = this.ref.doc('HCNFO3ZKlFNKK71JMzo8').onSnapshot(this.onCollectionUpdate)
}
componentWillUnmount() {
this.unsubscribe();
}
onCollectionUpdate = (querySnapshot) => {
this.setState({
theLocation: querySnapshot.data()
})
}
返回:mylocations: {
createdAt: Timestamp {seconds: 1545723905, nanoseconds: 177000000}
}
2)在云上使用.get()
.then(() => {
return firebaseAdminSDK.firestore().collection('locations').doc('HCNFO3ZKlFNKK71JMzo8').get()
})
返回:mylocations: {
createdAt: "2018-12-25T07:45:05.177Z"
}
保存位置时,我在云功能上使用了data.createdAt = FieldValue.serverTimestamp();
有什么想法吗?
答案 0 :(得分:0)
javascript客户端库中新的<script type="text/javascript">
document.getElementById("1").onclick = function () {
location.href = "www.google.com";
};
</script>
对象(秒和纳秒)将成为默认时间戳,它将替换Firebase时间戳中的旧javascript Timestamp
对象。您应该采用新的行为并更新代码以使用新的timestamp对象。
要使用时间戳记获取Date对象,请使用Date
方法:
toDate()
您可以将新的时间戳记行为设为应用程序和云功能中的默认行为,并更新代码,以便在删除Date对象时,应用程序不会中断。要使用新的时间戳,您可以将const timestamp = snapshot.get('createdAt');
const date = timestamp.toDate();
添加到Firestore设置中:
timestampsInSnapshots: true
答案 1 :(得分:0)
最终在云功能上使用moment.utc()
。
将const createdAt = FieldValue.serverTimestamp()
替换为const createdAt = moment.utc().valueOf()
在那之后,createdAt
字段在云功能和前端获取上返回相同的值,因为它在Firestore中将时间戳存储为number
而不是timestamp
。