为了账号安全,请及时绑定邮箱和手机立即绑定

在 Firebase 中处理时间戳

在 Firebase 中处理时间戳

MM们 2023-04-14 15:32:39
在 firebase 实时数据库中,一些看似基本的东西不起作用。这是JS代码:  let myDBRef = firebase.database().ref('MyCollection');  newItem = myDBRef.push(),  startTime = firebase.database.ServerValue.TIMESTAMP,  endTime = startTime + 24*3600*1000  newItem.set({    someField:'myFieldValue',    startTime:startTime,    endTime:endTime  });结果,我希望数据库中出现以下内容:  -MXb9s2-3mX3XZL_azRv      endTime: 1601691254295      someField: "myFieldValue"      startTime: 1601604854295但我得到这个:  -MXb9s2-3mX3XZL_azRv      endTime: "[object Object]86400000"      someField: "myFieldValue"      startTime: 1601604854295我做错了什么以及我需要如何更改 JS 代码以获得我期望的结果?
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

firebase.database.ServerValue.TIMESTAMP不是当前的服务器端时间戳,而是在写入数据库时转换为实际服务器端时间戳的标记值。

这意味着您不能像现在这样一步一步地存储计算值。你有两个选择:

存储duration而不是endTime。所以:


let myDBRef = firebase.database().ref('MyCollection');

newItem = myDBRef.push(),

startTime = firebase.database.ServerValue.TIMESTAMP,

duration = 24*3600*1000

newItem.set({

  someField:'myFieldValue',

  startTime:startTime,

  duration:duration

});

首先存储startTime,然后endTime在客户端或 Cloud Function 中计算,然后更新数据库。这会是这样的:


let myDBRef = firebase.database().ref('MyCollection');

newItem = myDBRef.push(),

startTime = firebase.database.ServerValue.TIMESTAMP,

duration = 24*3600*1000

newItem.set({

  someField:'myFieldValue',

  startTime:startTime,

}).then(() => {

  newItem.child("startTime").once("value").then((snapshot) => {

    newItem.update({ endTime: snapshot.val() + duration });

  })

})


查看完整回答
反对 回复 2023-04-14
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信