Похоже, что их инженеры использовали 2^9
(512
) бит для хранения года:
1.1.1970
(datekey: 33
) и 1.1.1971
(datekey: 545
)= 512
1.1.1972
(ключ даты: 1569
) и 1.1.1972
(ключ даты: 2081
) = 512
И 2^5
(32
) бит для храненияв месяц.
Таким образом, вычисление по модулю может выглядеть следующим образом:
function getDate(dateKey) {
const yearOffset = (dateKey - 32) % 512;
const year = (dateKey - 32 - yearOffset) / 512;
const day = yearOffset % 32;
const month = (yearOffset - day) / 32;
return new Date(year + 1970, month, day);
}
Кто-нибудь знает, почему они придумали такую логику?