Jump to content

Module:TwitterSnowflake/gen: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
No edit summary
No edit summary
Line 19: Line 19:
local timestampbinary = numberToBinStr(timestamp * 1000) -- lua only provides time in seconds, grr
local timestampbinary = numberToBinStr(timestamp * 1000) -- lua only provides time in seconds, grr
local snowflakebinary = timestampbinary .. shard .. sequence
local snowflakebinary = timestampbinary .. shard .. sequence
return tonumber(snowflakebinary,2)
return string.format("%18.0f",tonumber(snowflakebinary,2))
end
end



Revision as of 02:53, 20 January 2021

local p = {}

local function numberToBinStr(x)
	ret=""
	while x~=1 and x~=0 do
		ret=tostring(x%2)..ret
		x=math.modf(x/2)
	end
	ret=tostring(x)..ret
	return ret
end

function p.getSnowflake()
	local sequence = "000000000000" -- 12 sequence bits
	local shard = "0000000000" -- 10 shard bits
	local epoch = 1288834974
	local time = os.time()
	local timestamp = time - epoch
	local timestampbinary = numberToBinStr(timestamp * 1000) -- lua only provides time in seconds, grr
	local snowflakebinary = timestampbinary .. shard .. sequence
	return string.format("%18.0f",tonumber(snowflakebinary,2))
end

return p