/
laborgit
/
laborgit-frontend
Обзор
Документация
Войти
/
laborgit
/
laborgit-frontend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
main
src/utils/numeric.ts
36 строк
1 KB
gdev2018
TSKLBRGTFRNT-16: add generateUniqueIntWithTimestamp for TypeArea
27 июл 2025, 11:46
27 июл 2025, 11:46
42b709b
Код
Авторство
О чём код?
// ------------------------ // generateUniqueBigIntWithTimestamp // ------------------------ // Generate a unique BigInt value with timestamp // Example: 7315704815575839609 // Use in postgres: bigint // ------------------------ // Example to get date from generateUniqueBigIntWithTimestamp value in postgres // SELECT // (7315704815575839609 >> 22) AS timestamp_ms, // to_timestamp((7315704815575839609 >> 22) / 1000.0) AS date; // ------------------------ export const generateUniqueBigIntWithTimestamp = () => { const timestampMs = BigInt(Date.now()); const randomBuffer = new Uint8Array(3); window.crypto.getRandomValues(randomBuffer); const randomPart = ((BigInt(randomBuffer[0]) << 14n) | (BigInt(randomBuffer[1]) << 6n) | (BigInt(randomBuffer[2]) & 0x3fn)) + 1n; return (timestampMs << 22n) | randomPart; }; export const generateUniqueIntWithTimestamp = (): number => { const timestampMs = Date.now() % (1 << 30); const randomBuffer = new Uint8Array(3); crypto.getRandomValues(randomBuffer); const randomPart = ((randomBuffer[0] << 14) | (randomBuffer[1] << 6) | (randomBuffer[2] & 0x3f)) + 1; // randomPart ∈ [1, 2²² - 1] const uniqueNumber = (timestampMs << 22) | randomPart; console.log("generateUniqueIntWithTimestamp =", Math.abs(uniqueNumber)); return Math.abs(uniqueNumber); };