如果我有一个日期YYMMDDHHmmss,例如190525234530,我该如何计算出最小数量的字符以使用0-9a-z(36个字符)来表示呢?
我相信有3,153,600,000种组合(100年* 365天* 24小时* 60分钟* 60秒)可以容纳32位。这是否意味着我可以使用4个字符表示这些日期?
我对如何进行转换有些迷惑,所以如果有人可以向我展示数学,将不胜感激。
答案 0 :(得分:1)
我最终使用JavaScript进行了此操作,我决定将其压缩为6个字符,因此我创建了自己的时间,该时间从2019年1月1日起产生长达68年的唯一ID,这对我有用。
function getId() {
//var newTime = parseInt(moment().format("X")) - 1546300800;//seconds since 01/01/2019
var newTime = Math.floor((new Date()).getTime() / 1000) - 1546300800;//seconds since 01/01/2019
var char = "abcdefghijklmnopqrstuvwxyz0123456789";//base 36
return char[Math.floor(newTime / 36**5)]+
char[Math.floor(newTime%36**5 / 36**4)]+
char[Math.floor(newTime%36**4 / 36**3)]+
char[Math.floor(newTime%36**3 / 36**2)]+
char[Math.floor(newTime%36**2 / 36)]+
char[Math.floor(newTime%36)];
}
console.log(getId());