Node.js(Google Cloud Functions)中如何对时间戳减去8小时?
解决Firebase云函数中时间戳减去8小时的问题
嘿,我来帮你搞定这个问题!首先得理清几个关键细节,然后给你具体的实现方案~
首先要明确:admin.database.ServerValue.TIMESTAMP本身是个特殊占位符对象(结构是{".sv": "timestamp"}),并不是直接的时间戳数值。你能console.log出1537806936331,说明你应该是已经从数据库里读取到了实际的时间戳值(或者写入后获取到了这个数值),此时它是数字类型,转成字符串才会输出这个结果。
下面分两种常见场景给出解决方案:
场景1:你已经拿到了字符串形式的时间戳
要做减法,得先把字符串转回数字类型,再减去8小时对应的毫秒数:
- 先算8小时的毫秒数:
8 * 60 * 60 * 1000 = 28800000 - 将字符串时间戳转为数字,执行减法
- (可选)如果需要字符串结果,再转回去
代码示例:
// 假设你已经获取到字符串形式的currentTime(对应你console.log的结果) const currentTimeStr = "1537806936331"; const eightHoursInMs = 8 * 60 * 60 * 1000; // 转成数字并计算 const currentTimeNum = Number(currentTimeStr); const timeMinus8Hours = currentTimeNum - eightHoursInMs; // 输出结果,按需转字符串 console.log(timeMinus8Hours); // 数字形式的目标时间戳 console.log(timeMinus8Hours.toString()); // 字符串形式的目标时间戳
场景2:你想直接生成减8小时的时间戳并写入数据库
如果不需要先获取当前时间戳,而是想直接计算后写入数据库,可以用Date.now()拿到当前时间的毫秒数,再做减法:
const eightHoursInMs = 8 * 60 * 60 * 1000; const timeMinus8Hours = Date.now() - eightHoursInMs; // 写入数据库 admin.database().ref('/你的目标路径').set(timeMinus8Hours) .then(() => { console.log("减8小时的时间戳已成功写入"); }) .catch((error) => { console.error("写入失败:", error); });
小提醒
- 别直接对
admin.database.ServerValue.TIMESTAMP调用.toString(),因为它是个对象,直接转字符串会得到"[object Object]",你之前能拿到数值是因为已经从数据库获取到了实际的时间戳值。 - 时间戳的单位是毫秒,计算时一定要用毫秒数做减法,避免出错哦。
内容的提问来源于stack exchange,提问作者Karel Debedts
相关产品推荐
相关产品推荐

