正如我在评论中所说,您不应该依赖于从生成的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));
}
我会重复我的评论,以防万一有人认为将此代码用于除逆向工程中的练习以外的其他任何用途是一个好主意:
即使您知道如何从密钥中检索时间戳,在生产代码中执行此操作也是一个坏主意。时间戳用于生成唯一的,按时间顺序排列的序列。如果Firebase的某个人想出了一种更有效的方法(无论是他们偶然选择的效率的主观定义),都可以实现的算法
push
。如果您的代码需要时间戳,则应将时间戳添加到数据中。不依赖于它成为密钥的一部分。
Firebase记录了Firebase推送ID背后的算法。但是上述建议仍然存在:请勿将其用作存储日期的替代方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句