Mô đun:TwitterSnowflake

local p = {}

local Date = require('Mô đun:Date')._Date

function p.snowflakeToDate(frame)
	local format = frame.args.format or "%B %e, %Y"
	local epoch = tonumber(frame.args.epoch) or 1288834974
	local id_str = frame.args.id_str
	if type(id_str) ~= "string" then error("đối số hỏng #1 (chuỗi dự kiến, đã lấy " .. type(id_str) .. ")", 2) end
	if type(format) ~= "string" then error("đối số hỏng #2 (chuỗi dự kiến, đã lấy " .. type(format) .. ")", 2) end
	if type(epoch) ~= "number" then error("đối số hỏng #3 (số dự kiến, đã lấy " .. type(epoch) .. ")", 2) end
	local hi, lo = 0, 0
	local hiexp = 1
	local two32 = 2^32
	for c in id_str:gmatch(".") do
		lo = lo * 10 + c
		if lo >= two32 then
			hi, lo = hi * 10^hiexp + math.floor(lo / two32), lo % two32
			hiexp = 1
		else hiexp = hiexp + 1 end
	end
	hi = hi * 10^(hiexp-1)
	local timestamp = math.floor((hi * 1024 + math.floor(lo / 4194304)) / 1000) + epoch
	return os.date(format, timestamp)
end

function p.getDate(frame)
	-- just pass frame directly to snowflakeToDate, this wraps it but the args are the same plus
	if (frame.args.id_str):match("%D") then -- not a number, so return -2
		return -2
	end
	frame.args.format = "%B %e, %Y"
	frame.args.epoch = tonumber(frame.args.epoch) or 1288834974
	local epochdate = Date(os.date("%B %e, %Y", frame.args.epoch))
	local twitterdate = Date(p.snowflakeToDate(frame))
	if twitterdate == epochdate then -- created before epoch, so can't determine the date
		return -1
	end
	local date = Date(frame.args.date) or 0 -- if we error here, then an input of no date causes an error, which is contrary to the entire way {{TwitterSnowflake/datecheck}} works
	return date - twitterdate
end

local function abs_datediff(x)
	if type(x) == 'number' then return math.abs(x) end
	return math.abs(x.age_days)
end

function p.datecheck(frame)
	local args = frame.args
	if not (args.date and args.id_str) then
		error('Phải xác định date và id_str, ngay cả khi chúng trống.')
	end
	local errors = {
		args.error1 or 'Ngày không khớp của hai hoặc nhiều ngày',
		args.error2 or 'Không có ngày và đã đăng trước ngày 4 tháng 11 năm 2010',
		args.error3 or 'id_str không hợp lệ'
	}
	if mw.title.getCurrentTitle():inNamespace(0) and args.error_cat then
		for i = 1, 3 do errors[i] = errors[i] .. '[[' .. args.error_cat .. ']]' end
	end
	if not args.date:match('^%s*$') then -- #if:{{{date|}}}
		local testResult = p.getDate{ args = { date = args.date, id_str = args.id_str }}
		if testResult == -2 then return errors[3] end
		if abs_datediff(testResult) > 1 then return errors[1] end
	elseif not args.id_str:match('^%s*$') then
		local testResult = p.getDate{ args = { id_str = args.id_str }}
		if testResult == -1 then return errors[2] end
		if testResult == -2 then return errors[3] end
	end
end

return p
Chúng tôi bán
Bài viết liên quan
White Album ホワイトアルバム 2 Shiawase na Kioku 幸せな記憶
White Album ホワイトアルバム 2 Shiawase na Kioku 幸せな記憶
Đây là bài đầu tiên mà tôi tập, và cũng là bài mà tôi đã thuần thục
Shadow Of Death: Premium Games
Shadow Of Death: Premium Games
Trong tựa game này người chơi sẽ vào vai một người chiến binh quả cảm trên chuyến hành trình chiến đấu và cố gắng dẹp tan bè lũ hắc ám ra khỏi vương quốc
Nhân vật Yuzuriha -  Jigokuraku
Nhân vật Yuzuriha - Jigokuraku
Yuzuriha (杠ゆずりは) là một tử tù và là một kunoichi khét tiếng với cái tên Yuzuriha của Keishu (傾けい主しゅの杠ゆずりは, Keishu no Yuzuriha).
Yuki Tsukumo - Nhân vật tiềm năng và cái kết đầy nuối tiếc
Yuki Tsukumo - Nhân vật tiềm năng và cái kết đầy nuối tiếc
Jujutsu Kaisen là một series có rất nhiều nhân vật khác nhau, với những khả năng, tính cách và cốt truyện vô cùng đa dạng