Module:Datecalc

From The Satanic Wiki
Jump to navigation Jump to search

Documentation for this module may be created at Module:Datecalc/doc

-- <pre>Description: Wrapper/invocable for [[Module:Date]]
-- Syntax : based on http://tieske.github.io/date/ Use YYYY-MM-DD if possible
-- {{#invoke:Datecalc|main|funcname|date|arg1|arg2...}}
-- Example:
-- {{#invoke:Datecalc|main|diff|2013/12/10|2013/12/11}},{{#invoke:Datecalc|main|adddays|2013/12/10|5}}
local p = {}
local getArgs = require("Module:Arguments").getArgs
local gDate = require("Module:Date")
--% Entry point
--@ frame (table) Scribunto frame
--: (string) Results of date calculation
function p.main(frame)
	return p._main(getArgs(frame))
end
--% Entry point
--@ args (table) Template arguments
--: (string) Results of date calculation
function p._main(args)
	local currentDate = os.date("%Y/%m/%d")
	local func = args[1]
	local tDateFuncs = {diff = 1, epoch = 1, isleapyear = 1}
	
	if not func then 
	   return
	end
	
	if tDateFuncs[func] then
		local arg2 = args[2]
		local arg3 = args[3] or currentDate
		
		if func == "diff" and arg2 and arg3 then
			return gDate[func](arg2, arg3):spandays()
		end
		
		return gDate[func](arg2)
	else
		currentDate = args[2] or currentDate
		local objDate = gDate(currentDate)
		local dateParams = {}
		
		if args[1] or args[2] then
			--Excludes function, date, leaves rest of parameters
			for i, v in ipairs(args) do
				if i > 2 then
					table.insert(dateParams, v)
				end
			end
		end

		return objDate[func](objDate, unpack(dateParams))
	end
end
 
return p