Module:TwitterSnowflake
This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
This Lua module is used on approximately 41,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 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