Modulo:Data: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m abbreviato nome parametro
rinominato d1 e d2 in d1_ut e d2_ut, +controllo per diff zero
Riga 28:
 
return {
d1d1_ut = tonumber(mw.getContentLanguage():formatDate('U', args.fineinizio, true)),
d2d2_ut = tonumber(mw.getContentLanguage():formatDate('U', args.iniziofine, true))
}
end
Riga 38:
end
 
-- Aggiunge un eventuale prefisso e suffisso al risultato invece del segno.
-- L'ultimo parametro diffVal è utilizzato solo da dateDiff per evitare che
local function formatResult(response, past, dir)
-- {{#invoke:Data|diff|inizio=2016/01/01|fine=2015/12/31|magnitudine=anni}} ritorni "-0 anni".
local function formatResult(responseresult, pastd1_ut, d2_ut, dir, diffVal)
local ret
if dir then
-- ritorna il 'fa' anche con d1_ut == d2_ut (si potrebbe configurare con un parametro)
ret = past and response .. ' fa' or 'tra ' .. response
ret = d1_ut < d2_ut and 'tra ' .. result or result .. ' fa'
else
ret = past(d1_ut <= d2_ut or diffVal == 0) and result or '-' .. response or responseresult
end
return ret
Line 53 ⟶ 56:
-------------------------------------------------------------------------------
 
-- Ritorna la differenza in anni, mesi e giorni tra le date d1d1_ut e d2d2_ut (Unix time).
-- Se rawTable è true ritorna una table con le chiavi: year, month, day, seconds.
local function dateDiffYMD(d1d1_ut, d2d2_ut, rawTable, dir)
local monthdays = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
local retd1, = { secondsd2 = mathos.absdate(d1'*t', - d2d1_ut), }os.date('*t', d2_ut)
local ret = { seconds = math.abs(d1_ut - d2_ut) }
local past = true
 
if d1d1_ut >= d2d2_ut then d1, d2 = d2, d1 end
d1, d2 = d2, d1
past = false
end
d1, d2 = os.date('*t', d1), os.date('*t', d2)
 
-- anni
Line 90 ⟶ 89:
end
 
return rawTable and ret or formatResult(mw.text.listToText(ret, ',&#32;', '&#32;e&#32;'), pastd1_ut, d2_ut, dir)
end
 
Line 128 ⟶ 127:
local function convert(seconds, unit, text, text2)
local ret = math.floor(seconds / unit)
return ret, string.format('%s %s', ret, ret == 1 and text or text2)
end
 
-- 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(d1d1_ut, d2d2_ut, magnitudine, magnitudine_min, dir)
local diff, ret, val, result
 
diff = dateDiffYMD(d1d1_ut, d2d2_ut, true)
magnitudine = magnitudine or getMagnitudine(diff, magnitudine_min)
 
if magnitudine == 'secondi' then
retval, result = convert(diff.seconds, 1, 'secondo', 'secondi')
elseif magnitudine == 'minuti' then
retval, result = convert(diff.seconds, 60, 'minuto', 'minuti')
elseif magnitudine == 'ore' then
retval, result = convert(diff.seconds, 3600, 'ora', 'ore')
elseif magnitudine == 'giorni' then
retval, result = convert(diff.seconds, 86400, 'giorno', 'giorni')
elseif magnitudine == 'settimane' then
retval, result = convert(diff.seconds, 604800, 'settimana', 'settimane')
elseif magnitudine == 'mesi' then
val = diff.years * 12 + diff.months
retresult = string.format('%s %s', val, val == 1 and 'mese' or 'mesi')
else
retval = diff.years
result = string.format('%s %s', diff.years, diff.years == 1 and 'anno' or 'anni')
end
return formatResult(retresult, d1d1_ut, < d2d2_ut, dir, val)
end
 
Riga 168:
function p._diff(args)
local success, result = xpcall(function() return parseArgs(args) end, errhandler)
return success and dateDiff(result.d1d1_ut, result.d2d2_ut, args.magnitudine, args['magnitudine min'], args.dir) or result
end
 
Riga 174:
function p._diff_ymd(args)
local success, result = xpcall(function() return parseArgs(args) end, errhandler)
return success and dateDiffYMD(result.d1d1_ut, result.d2d2_ut, false, args.dir) or result
end