根据这篇博文,firebase数组键是使用时间戳创建的:
它通过根据当前时间戳(匹配服务器时间的偏移量)分配永久的唯一ID来实现此目的.
有没有办法恢复此时间戳以供以后使用,给定密钥?
Fra*_*len 35
正如我在评论中所说,你不应该依赖于从生成的id解码时间戳.而不是那样,您只需将其存储在Firebase的属性中即可.
也就是说,获得时间戳的结果相当容易:
// DO NOT USE THIS CODE IN PRODUCTION AS IT DEPENDS ON AN INTERNAL
// IMPLEMENTATION DETAIL OF FIREBASE
var PUSH_CHARS = "-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";
function decode(id) {
id = id.substring(0,8);
var timestamp = 0;
for (var i=0; i < id.length; i++) {
var c = id.charAt(i);
timestamp = timestamp * 64 + PUSH_CHARS.indexOf(c);
}
return timestamp;
}
var key = prompt("Enter Firebase push ID");
if (key) {
var timestamp = decode(key);
console.log(timestamp+"\n"+new Date(timestamp));
alert(timestamp+"\n"+new Date(timestamp));
}Run Code Online (Sandbox Code Playgroud)
我将重复我的评论,以防有人认为将此代码用于其他任何事情都是一个好主意,而不是作为逆向工程中的练习:
即使您知道如何从密钥中检索时间戳,在生产代码中执行此操作也是一个坏主意.时间戳用于生成唯一的,按时间顺序排列的序列.如果Firebase的某个人找到了一种更有效的方式(他们恰好选择哪种主观的效率定义)来实现相同的目标,他们可能会改变算法
push.如果您的代码需要时间戳,则应该为数据添加时间戳; 不要依赖它是你的钥匙的一部分.
Firebase记录了Firebase推送ID背后的算法.但上述建议仍然存在:不要将此作为存储日期的替代方法.
| 归档时间: |
|
| 查看次数: |
6333 次 |
| 最近记录: |