You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase中ServerValue.TIMESTAMP转字符串及用作数据库路径报错咨询

问题1:获取ServerValue.TIMESTAMP的具体时间戳数值

admin.database.ServerValue.TIMESTAMP是Firebase提供的服务端时间占位符对象,并非实际的时间戳数值,只有当写入请求到达Firebase实时数据库服务端时,才会被替换为当前服务端的毫秒级时间戳,本地直接打印/调用自然无法拿到具体值。

可通过以下两种方式拿到可用的时间戳:

  • 方法1:写入完成后通过回调获取服务端返回的真实时间戳(时间精度高,和数据库存储值完全一致)
const signupTime = admin.database.ServerValue.TIMESTAMP
const ref = database.ref(`/admin/vendorOrder/${vendor}/${userID}`)
ref.set(signupTime)
  .then(() => ref.once('value'))
  .then(snapshot => {
    const realTimestamp = snapshot.val()
    // 转字符串格式时间戳直接调用toString()即可
    const timestampStr = realTimestamp.toString()
    console.log(timestampStr)
  })
  • 方法2:如果对时间精度要求不高,不需要严格对齐服务端时间,可直接用本地时间生成
// 本地生成的毫秒时间戳,可直接打印、转字符串、拼接路径
const signupTime = Date.now()
console.log(signupTime.toString())
问题2:第二段代码报错原因

你直接将signupTime这个占位符对象拼入了实时数据库的路径中,数据库路径仅允许字符串、数字类型的合法字符,传入对象会直接生成非法路径,触发报错。

如果需要以时间戳作为路径节点,要先拿到真实的时间戳数值再拼接路径,参考写法:

const ref = database.ref(`/admin/vendorOrder/${vendor}/${userID}`)
ref.set(admin.database.ServerValue.TIMESTAMP)
  .then(() => ref.once('value'))
  .then(snapshot => {
    const realTimestamp = snapshot.val()
    // 拿到真实数值后再拼接路径写入order
    return database.ref(`/admin/vendorOrder/${vendor}/${userID}/${realTimestamp}/order`).set(order)
  })

内容的提问来源于stack exchange,提问作者Roy Sougat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:00:03