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