Modulo:Data
La documentazione per questo modulo può essere creata in Modulo:Data/man
local getArgs = require('Modulo:Arguments').getArgs
require('strict')
-------------------------------------------------------------------------------
-- Funzioni di utilità
-------------------------------------------------------------------------------
local function isValidDate(date)
return pcall(function() mw.getContentLanguage():formatDate('', date) end)
end
-- Controlla args.inizio e args.fine e li ritorna in Unix time
local function parseArgs(args)
if not args.inizio then
error('la data di inizio è obbligatoria', 2)
elseif not isValidDate(args.inizio) then
error('la data di inizio non è valida', 2)
elseif not args.fine then
error('la data di fine è obbligatoria', 2)
elseif not isValidDate(args.fine) then
error('la data di fine non è valida', 2)
end
return {
d1_ut = tonumber(mw.getContentLanguage():formatDate('U', args.inizio, true)),
d2_ut = tonumber(mw.getContentLanguage():formatDate('U', args.fine, true))
}
end
-- Controlla args.data e la ritorna in Unix time
local function parseArgs2(args)
if not args.data then
error('la data è obbligatoria', 2)
elseif not isValidDate(args.data) then
error('la data di inizio non è valida', 2)
end
return {
d = tonumber(mw.getContentLanguage():formatDate('U', args.data, true)),
}
end
-- Error handler per xpcall, formatta l'errore
local function errhandler(msg)
return string.format('<span class="error">Errore: %s</span>', msg)
end
-------------------------------------------------------------------------------
-- dateDiff
-------------------------------------------------------------------------------
-- Ritorna la differenza tra le date d1 e d2 (Unix time) in solo una tra le unità:
-- anni, mesi, settimane, giorni, ore, minuti e secondi.
local function dateDiff(d1_ut, d2_ut)
return math.floor((d2_ut - d1_ut) / 86400);
end
-------------------------------------------------------------------------------
-- API
-------------------------------------------------------------------------------
local p = {}
-- Per utilizzare diff da un altro modulo.
function p._diff(args)
local success, result = xpcall(function() return parseArgs(args) end, errhandler)
return success and dateDiff(result.d1_ut, result.d2_ut) or result
end
-- Entry point per {{#invoke:Data|diff}}
function p.diff(frame)
return p._diff(getArgs(frame))
end
-- Per utilizzare getDay da un altro modulo.
function p._getDay(args)
local success, result = xpcall(function() return parseArgs2(args) end, errhandler)
return success and os.date("*t", result.d).day or result
end
-- Entry point per {{#invoke:Data|getDay}}
function p.getDay(frame)
return p._getDay(getArgs(frame))
end
-- Per utilizzare getMonth da un altro modulo.
function p._getMonth(args)
local success, result = xpcall(function() return parseArgs2(args) end, errhandler)
return success and os.date("*t", result.d).month or result
end
-- Entry point per {{#invoke:Data|getMonth}}
function p.getMonth(frame)
return p._getMonth(getArgs(frame))
end
-- Per utilizzare getYear da un altro modulo.
function p._getYear(args)
local success, result = xpcall(function() return parseArgs2(args) end, errhandler)
return success and os.date("*t", result.d).year or result
end
-- Entry point per {{#invoke:Data|getYear}}
function p.getYear(frame)
return p._getYear(getArgs(frame))
end
return p