将日期压缩为唯一的字母数字字符

时间:2019-05-07 22:56:50

标签: date compression bit base radix

如果我有一个日期YYMMDDHHmmss,例如190525234530,我该如何计算出最小数量的字符以使用0-9a-z(36个字符)来表示呢?

我相信有3,153,600,000种组合(100年* 365天* 24小时* 60分钟* 60秒)可以容纳32位。这是否意味着我可以使用4个字符表示这些日期?

我对如何进行转换有些迷惑,所以如果有人可以向我展示数学,将不胜感激。

1 个答案:

答案 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());