Modul:TimestampedTable

De la Wikipedia, enciclopedia liberă

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