通过JS获取雪花ID中的时间戳,也就是获取该雪花ID的生成时间
什么是雪花ID
snowflake是Twitter开源的分布式ID生成算法,结果是64bit的Long类型的ID,有着全局唯一和有序递增的特点。
- 最高位是符号位,因为生成的 ID 总是正数,始终为0,不可用。
- 41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。
- 10位的机器标识,10位的长度最多支持部署1024个节点。
- 12位的计数序列号,序列号即一系列的自增ID,可以支持同一节点同一毫秒生成多个ID序号,12位的计数序列号支持每个节点每毫秒产生4096个ID序号。
如果后台是通过Hutool的IdUtil默认配置生成的雪花ID,则可以使用以下的代码获取雪花ID对应的时间戳
const SEQUENCE_BITS = 12n;
const WORKER_ID_BITS = 5n;
const DATA_CENTER_ID_BITS = 5n;
const twepoch = 1288834974657n;
function getGenerateDateTime(id: bigint): bigint {
return (id >> (SEQUENCE_BITS + WORKER_ID_BITS + DATA_CENTER_ID_BITS) & ~(-1n << 41n)) + twepoch;
}
如果后台是通过Hutool的IdUtil生成的雪花ID,但是有修改部分配置,一般只需要替换以下的这几个值与后台的对应上即可
// 序列号的位数
SEQUENCE_BITS
// 机器节点ID的位数
WORKER_ID_BITS
// 数据中心节点ID的位数
DATA_CENTER_ID_BITS
// 起始时间戳
twepoch