Module:TwitterSnowflake
| This module is rated as ready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through sandbox testing rather than repeated trial-and-error editing. |
| This module is currently protected from editing. See the protection policy and protection log for more details. Please discuss any changes on the talk page; you may submit an edit request to ask an administrator to make an edit if it is uncontroversial or supported by consensus. You may also request that this page be unprotected. |
| This Lua module is used on approximately 46,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
| Related pages |
|---|
| This module depends on the following other modules: |
This is a Lua module to translate snowflakes from platforms such as Twitter and Discord to timestamps. This can be used for automatically generating dates for templates like {{cite tweet}}.
Usage
There is one required parameter: |id_str=, which must be the snowflake ID of the tweet. For example, 1345021162959503360.
{{#invoke:TwitterSnowflake|snowflakeToDate|id_str=1345021162959503360}} returns Script error: The module returned a nil value. It is supposed to return an export table..
To specify the date format, use |format=.
{{#invoke:TwitterSnowflake|snowflakeToDate|id_str=1345021162959503360|format=%e %B %Y}} returns Script error: The module returned a nil value. It is supposed to return an export table. — useful to specify, especially for use in CS1 citations, in case the default date format would change in the future (though unlikely).
Custom epoch
By default, the epoch used is that of Twitter. To specify a different epoch, such as that of Twitter, use |epoch=. The epoch of Discord is 1420070400
{{#invoke:TwitterSnowflake|snowflakeToDate|id_str=797545051047460888|epoch=1420070400}} returns Script error: The module returned a nil value. It is supposed to return an export table..
See also
local p = {};
p.snowflakeToDate = function (id_str, format, epoch)
format = format or "!%c"
epoch = epoch or 1288834974
if type(id_str) ~= "string" then error("bad argument #1 (expected string, got " .. type(id_str) .. ")", 2) end
if type(format) ~= "string" then error("bad argument #2 (expected string, got " .. type(format) .. ")", 2) end
if type(epoch) ~= "number" then error("bad argument #3 (expected number, got " .. type(epoch) .. ")", 2) end
local hi, lo = 0, 0
local hiexp = 1
for c in id_str:gmatch "." do
lo = lo * 10 + tostring(c)
if lo >= 2^32 then
hi, lo = hi * 10^hiexp + math.floor(lo / 2^32), lo % 2^32
hiexp = 1
else hiexp = hiexp + 1 end
end
local timestamp = math.floor((hi * 1024 + math.floor(lo / 4194304)) / 1000) + epoch
return os.date(format, timestamp)
end