Сжать дату до уникальных буквенно-цифровых символов - PullRequest
0 голосов
/ 08 мая 2019

Если у меня есть дата ГГММДДЧЧммсс, такая как 190525234530, как мне рассчитать наименьшее количество символов, чтобы представить это, используя 0-9a-z (36 символов)?

Я полагаю, что есть 3 153 600 000 комбинаций (100 лет * 365 дней * 24 часа * 60 минут * 60 секунд), которые вписываются в 32 бита. Значит ли это, что я мог бы представить эти даты, используя 4 символа?

Я немного растерялся относительно того, как сделать преобразование, поэтому, если бы кто-нибудь мог показать мне математику, которая была бы очень признательна.

1 Ответ

1 голос
/ 08 мая 2019

Я закончил тем, что делал это в javascript, я решил, что хочу сжать до 6 символов, поэтому я создал свое собственное время, которое генерирует уникальные идентификаторы на срок до 68 лет, начиная с 01.01.2009, и это сработало для меня.

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());
...