在 Firebase 中处理时间戳

在 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 代码以获得我期望的结果?


MM们
浏览 93回答 1
1回答

慕村9548890

这firebase.database.ServerValue.TIMESTAMP不是当前的服务器端时间戳,而是在写入数据库时转换为实际服务器端时间戳的标记值。这意味着您不能像现在这样一步一步地存储计算值。你有两个选择:存储duration而不是endTime。所以:let myDBRef = firebase.database().ref('MyCollection');newItem = myDBRef.push(),startTime = firebase.database.ServerValue.TIMESTAMP,duration = 24*3600*1000newItem.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*1000newItem.set({  someField:'myFieldValue',  startTime:startTime,}).then(() => {  newItem.child("startTime").once("value").then((snapshot) => {    newItem.update({ endTime: snapshot.val() + duration });  })})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript