Modul:TimestampedTable
Aspect
Aceasta este pagina de documentație pentru Modul:TimestampedTable. Pagina descrie modul de folosire al formatului și conține categoriile de care acesta aparține, precum și orice altceva ce nu face parte din formatul propriu-zis. |
Metamodul utilitar care permite lucrul cu tabele de valori ordonate după date. Fiecare valoare dintr-un astfel de tabel este asociată unei perioade ce începe cu momentul exprimat prin cheie, care are formatul 'AAAA-LL-ZZ'. O cheie având valoarea _ reprezintă valoarea inițială, care nu are dată de început.
Exemplu:
{ ['_'] = "valoare actuală", ['2000-08-01'] = "valoarea de până la 1 august 2000", ['1990-03'] = "valoarea de până în martie 1990" }
Aplicabilitatea acestui modul stă în modulele de date care stochează date ce reprezintă succesiuni istorice.
local DateUtils = require('Modul:DateUtils')
local p = {}
local function getTimestampedValueFromArray(arr, ts)
local tsDate = type(ts) == 'string' and DateUtils.parseDate(ts) or type(ts) == 'table' and ts
if not tsDate then tsDate = nil end
local closestDate = nil
local closestDateLabel = nil
for k,v in pairs(arr) do
local crtStartDate = k == '_' and {year=-3000, precision=9} or DateUtils.parseDate(k)
if (nil == tsDate or (tsDate and DateUtils.compare(crtStartDate, tsDate) <= 0)) and
(nil == closestDate or DateUtils.compare(crtStartDate, closestDate) > 0) then
closestDate = crtStartDate
closestDateLabel = k
end
end
return arr[closestDateLabel]
end
p.getValueByTimestamp = getTimestampedValueFromArray
return p